/*
* 爬楼梯问题:每一次可以选择爬1层或者爬2层。求爬n层楼梯有几种选择
* 1.动态规划:爬n层楼梯的选择为f(n),那么f(n) = f(n-1) + f(n-2)。
* 2. 尾递归,比直接递归的好处是不需要记录本次递归前的函数状态,时间消耗少。
* */
public class ClimbStairs {
public int climbStairs(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
public int tailrecursion(int n, int a, int b){
if(n <= 1){
return b;
}
return tailrecursion(n-1, b,a+b);
}
public static void main(String[] args) {
ClimbStairs c = new ClimbStairs();
System.out.println(c.climbStairs(45));
System.out.println(c.tailrecursion(45,1,1));
}
}
leetcode---爬楼梯问题
最新推荐文章于 2024-09-17 15:46:56 发布