题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
一开始拿到这道题,也是一脸懵逼,网上找点思路,其实就是一个斐波那契数列,瞬间把代码撸了出来,不得不说有了思路就好办,其余都是浮云,就本题而言,就是2和1的组合成一个数字的问题,其实不难,但是,你通过前几项的推演和计算,会发现这个规律,这道题就充分显示出了数学功底在算法中的应用;
我的代码
public static int climbStairs(int n) {
if(n == 1 || n == 0)
return 1;
else if(n ==2)
return 2;
else {
int i = 1;
int j = 2;
int k = 0;
while (n >= 3) {
k = i + j;
int x = j;
j = k;
i = x;
n--;
}
return k;
}
}
通过看看排名比较高的代码:
其实思路跟我的差不多,我的并不需要另外开辟空间
class Solution {
public int climbStairs(int n) {
if (n == 1)
return 1;
else if (n == 2)
return 2;
else {
int[] ans = new int[n];
ans[0] = 1;
ans[1] = 2;
for(int i=2;i<n;i++) {
ans[i]=ans[i-1]+ans[i-2];
}
return ans[n-1];
}
}
}