LeetCode题解:Climbing Stairs

来源:互联网 发布:阿里云 vpc 内网 编辑:程序博客网 时间:2024/05/22 00:42

题目链接:

Climbing Stairs


题目描述:

You are climbing a stair case. It takes n steps to reach to the top。
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?


题目解释:

假设你正在怕一个楼梯,你要走n步才能到达楼梯顶部,每一次你既可以爬一个台阶,也可以爬两个台阶,那么一共有多少种不同的方式可以走到楼梯的顶部?


解题方案:

由题目描述,我们可以知道,数字n代表着台阶的阶数,这个就是我们的输入。然后我们根据输入推断出一共有多少不同的方案,例如 n = 0,那么我的方案为s = 0, n = 1 , s = 1, n = 2, s = 2, n = 3 , s = 3………; 到走到最后一步时,我们既可以从第n-1个台阶跨上去,也可以从n-2个台阶上跨上去,所以我们走n个台阶的方案数就是n-1个台阶的方案数和n-2个台阶方案数之和,S[n] = S[n-1] + S[n-2]; 这是什么? 大声的告诉我! 这是不是斐波那契数列!!!???,


明白了解题思路我们的代码就很好写了:

int climbStairs(int n) {    int stairs[1000];    if (n <= 2)    {        return n;    }        stairs[1] = 1;    stairs[2] = 2;    for (int i = 3; i <= n; ++i)    {        stairs[i] = stairs[i-1] + stairs[i-2];     }    return stairs[n];}

遇到爬楼梯问题已经四年了,一直还不知道它是斐波那契数列呢。

0 0
原创粉丝点击