0
点赞
收藏
分享

微信扫一扫

算法-DP爬楼梯问题


package org.lht.boot.lang.suanfa;

/**
* 思路分析:总次数=最后一步走了一步的次数+最后一步走两步的次数
* 阶 次数
* 1 1
* 2 2
* 3 3 最后走一步(2阶上)2次+最后走两步(1阶上)1次
* 4 5 最后走一步3阶上的次数+最后走两步2阶上的次数=5
*/
class Solution {
public static int climbStairs(int n) {

int[] arr = new int[n + 1];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i <= n; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}


private static int climbStairs1(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int num1 = 1;
int num2 = 2;
for (int i = 2; i < n; i++) {
int tmp = num1 + num2;
num1 = num2;
num2 = tmp;
}
return num2;
}
//递归
private static int climbStairs2(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}

return climbStairs2(n - 1) + climbStairs2(n - 2);
}


public static void main(String[] args) {
System.out.println(climbStairs(6));
System.out.println(climbStairs1(6));
System.out.println(climbStairs2(5));

}
}

思路就是类同于斐波那契数列,前面的加上后面的就是总的。

算法-DP爬楼梯问题_数据结构

可以具体了解:​​DP爬楼梯问题​​


举报

相关推荐

爬楼梯问题(算法)

DP进阶之路——爬楼梯

DP--爬楼梯1

【算法题】爬楼梯

爬楼梯

【LeeCode】爬楼梯

0 条评论