爬楼梯
你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N时,你可以采用多少种不同的方式爬完这个楼梯?
递归
/**
* 爬楼梯【Recursion】
* 你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯()
* 运行结果System.out.println(upRecursion(11));
* @param u 楼梯数
* @return 结果
*/
public static long upRecursion(int u){
//1层以上要统计走一步dp[i-1]和走两步dp[i-2]的情况
if(u>=2) return upRecursion(u-1)+upRecursion(u-2);
//优先处理0层和1层情况:只有1种方式
else if(u>=1) return upRecursion(u-1);
else return 1;
}
动态规划
/**
* 爬楼梯【dynamic programming】
* 你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯()
* 运行结果System.out.println(upDp(11));
* @param u 楼梯数
* @return 结果
* @param u
* @return
*/
public static long upDp(int u){
int[] dp = new int[u+1];
//优先处理0层和1层情况:只有1种方式
dp[0] = dp[1] = 1;
for(int i=2;i<=u;i++){
//1层以上要统计走一步dp[i-1]和走两步dp[i-2]的情况
dp[i] = dp[i-1] + dp[i-2];
}
return dp[u];
}