题目链接:
https://leetcode.cn/problems/climbing-stairs/
资源:
关于动态规划和贪心算法的区别,动态规划的常见题型,我总结了一些(还有文档哦),大家可移步至:动态规划基础知识点(包含文档)-CSDN博客
AC代码:
//动态规划基础题
//dp,i,公式,初始化,遍历顺序,打印//关键:想清楚为啥给出2,3这两种情况的答案
//再加上自己分析出来n=4时,方案数为:5 = 2 + 3;
// 5 8 5 3
//答案问的是方案数,就考虑方案数的关系/*!!!!为什么该题只和前两阶有关系:因为它只能迈1阶或者2阶,第4阶只能从2阶和3阶迈上来!!!!!*/int climbStairs(int n)
{if (n == 1)return 1;//dp:存放到达第i层的方案总数int dp[46] = { 0 }, i;/*法一:从起点开始初始化*/dp[0] = 1;/*注意是1,不是0,因为dp[2] = 2,要统一公式*/dp[1] = 1;for (i = 2; i <= n; i++){dp[i] = dp[i-1] + dp[i-2];} 、/*法二:不管起点,直接初始化1,2,因为题目n的数据从1开始dp[0]是没有定义的*/return dp[n];
}