StackTc
2018-02-02 17:48
采纳率: 61.9%
浏览 1.1k
已采纳

LeetCode 70. Climbing Stairs

尴尬,看了答案看不懂,求解释。答案如下

 public class Solution {
    public int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

求解dp[i] = dp[i - 1] + dp[i - 2];这一步是为什么。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • threenewbee 2018-02-03 15:01
    已采纳

    典型的动态规划算法

    动态规划算法的思想就是,每次解决问题的一部分

    后面的计算利用前面的结果,而不必每次从头算起。

    这里开了一个dp的数组,每次计算一个台阶。

    而当前台阶的走法是前面两个台阶走法的和。

    已采纳该答案
    打赏 评论
  • s_listening 2018-02-03 01:55

    爬楼梯 可以爬2阶或者1阶 就可以把整个过程分解
    将最后一次爬分解出来

    最后一阶就有两种情况
    1. 爬了前N-1 阶 最后一阶 只需要爬1阶
    2. 爬前N-2 阶 最后一阶爬两阶
    所以 dp[i]=dp[i-1]+dp[i-1]

    打赏 评论
  • XG2333 2018-02-03 04:55

    首先,把上i级台阶所有的方法数用dp[i]表示。
    如果有i(i>2)级台阶的话,第一步有两种选择:一次上两级与一次上一级。
    所以上i级台阶所有的方法数就等于dp[i]=dp[i-1]+dp[i-1]
    然后这样递归下去。
    我记得这是高中的排列组合题,当时老师也有讲这个方法。

    打赏 评论
  • 有点贪玩 2018-02-03 13:47

    这就是一个动态规划。

    打赏 评论

相关推荐 更多相似问题