leetcode 70. 爬楼梯 续
思路
题目可以划分为多个重叠子问题,爬到N阶梯的方法数量,等于两个部分之和:
1.爬上N-1阶梯的方法数量,因为再爬一阶就能达到第N阶
2.爬上N-2阶梯的方法数量,因为再爬二阶梯就能达到第N阶
因此得公式:
dp[n] = dp[n-1]+dp[n-2]
同时需要初始化dp[0] = 1和dp[1] = 1
时间复杂为O(n)
class Solution { public: int climbStairs(int n) { vector<int >res(n+5,0);//定义容器保存结果 res[0] = 1; res[1] = 1; res[2] = 2; res[3] = 3;//定义初始值 for (int i = 4;i<=n;i++)//从第四个开始 { res[i] = res[i-1]+res[i-2]; //4以后的进行动态规划迭代 } return res[n];//返回最后的结果 } };
以大多数人努力程度之低,根本轮不到去拼天赋~