版权声明:本文为博主原创文章,未经博主允许不得转载。
难度:容易
要求:
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例 :
比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法
返回 3
思路:
爬楼梯可以用到斐波那契数列F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)所以我们程序中需要用到递归函数。记住如果楼梯的阶数是N,这上楼梯的方法总数为f(N+1)。
public class Solution {
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int n) {
// write your code here
if(n = 0){
return 1;
}
if (n == 1 || n == 2) {
return n;
}
int n1 = 1;
int n2 = 2;
for (int i = 3; i <= n; i++) {
int tmp = n2;
n2 = n1 + n2;
n1 = tmp;
}
return n2;
}
}
如果此题可扩展为一次可以跨m级台阶,则共有多少种方法?
public class Solution {
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int ladder) {
// write your code here
return calculateCount(ladder,2);
}
public int calculateCount(int ladder, int maxJump) {
int jump = 0;
if (ladder == 0) {
return 1;
}
if (ladder >= maxJump) {
// 剩下的楼梯大于最大可跳跃数
for (int i = 1; i <= maxJump; i++) {
jump += calculateCount(ladder - i, maxJump);
}
} else {
// 剩下的楼梯不足最大可跳跃数
jump = calculateCount(ladder, ladder);
}
return jump;
}
}