【无标题】

个人算法学习记录Day1

题目:爬楼梯

思路:

1.我们列出结果:当n=1、n=2、n=3、 n=4时
在这里插入图片描述
我们观察下面一排整理后的,我们结合题目可以得知,结尾的数字要么为1要么为2,所以我们分成两种情况讨论。

情况1:结尾为1时
       我们每次登上1个台阶(n=4时),是n=3的情况下多走了1步(指结尾是1的情况,上图中的下划线部分)。是包括了n=3的所有情况的结尾多走1格,很好理解,毕竟从台阶3上到台阶4只需要跨1格。
情况2:结尾为2时
       我们每次登上2个台阶(n=4时),是n=2的情况下多走了2步(指结尾是2的情况,上图中的非下划线部分)。是包括了n=2的所有情况的结尾多走2格,很好理解,毕竟从台阶2上到台阶4只需要跨2格。

2.我们可以从上述思路中发现

dp[4] = dp[3] + dp[2]  //dp[n]代表有多少种可能性,即结果

dp[n] = dp[n-1] + dp[n-2]

我们已经从结果来倒推公式似乎没有问题,那我们如何在代码层面实现呢?

代码

从**dp[n] = dp[n-1] + dp[n-2]**出发,最简单的方式就是枚举,把每个dp[n]的数字算出来,即使用循环。当然,在dp[1]和dp[2]的结果是直接写出的。

	//数组从1开始,不从0
	dp[1] = 1;
    dp[2] = 2;
    for(int i=3;i<=n;i++){
        dp[i] = dp[i-1] + dp[i-2];
    }

所以我的题解代码如下

int climbStairs(int n) {
    int dp[46];
    dp[1] = 1;
    dp[2] = 2;
    int result = 0;
    switch(n){
        case 1: return 1;
        case 2: return 2; 
        default: break;
    }
    for(int i=3;i<=n;i++){
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}

最后

思路草稿:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值