青蛙跳台阶
题目描述:
在爬楼梯时,每次可向上走1阶台阶或2阶台阶,问有n阶楼 梯有多少种上楼的方式。
题目分析:
假设有1层楼梯,每次只能向上1阶台阶,那上楼的方式 1 种。
假设有2层楼梯,可以选择每次上1阶台阶,也可以选择每次上2阶台阶,上楼方式有 2 种。
假设有3层楼梯,相当于2阶+1阶,2 + 1 = 3 种
假设有4阶楼梯,相当于3阶+2阶,3 + 2 = 5 种
以此类推····
假设有n阶楼梯,等于(n-1)阶 + (n-2)阶种
列算式分析:
n=1,1种方式,1
n=2, 2种方式,(1,1 ) (2)
n=3, 3种方式,(1,1,1)(1,2)(2,1)
n=4, 5种方式,(1,1,1,1)(1,1,2)(1,2,1)(2,1,1)(2,2)
n=5, 8种方式,(1,1,1,1,1)(1,1,1,2)(1,1,2,1)(1,2,1,1)(2,1,1,1)(2,2,1)(1,2,2)(2,1,2)
n=6, 13种方式,(1,1,1,1,1,1)(2,2,2)(1,1,1,1,2)(1,1,1,2,1)(1,1,2,1,1)(1,2,1,1,1)(2,1,1,1,1)(2,2,1,1)(2,1,1,2)(1,1,2,2)(1,2,2,1)(1,2,1,2)(2,1,2,1)
以此类推····
代码实现:
public class Test {
private int getNum(int n){
if(n <= 2){
return n;
}
return getNum(n-1)+getNum(n-2);
}
public static void main(String[] args) {
System.out.println(new Test().getNum(6));
System.out.println(new JobTest().getNum2(8));
}
private int getNum2(int n){
if(n <= 2){
return n;
}
int[] temp = new int[n+1];
temp[1] = 1;
temp[2] = 2;
for (int i = 3;i<=n;i++){
temp[i] = temp[i-1]+temp[i-2];
}
return temp[n];
}
}
看到某网友的建议,使用动态规划的解题思路,也进行了学习,更新一下。
以上如有问题,欢迎指正~