小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
爬楼梯
实际是求解斐波拉契数列第n项的值 f(n) = f(n-1)+f(n-2)
方法一:暴力递推
- 找出递推公式,暴力递推
- 不使用缓存,时间复杂度高,leetcode不通过
/**
* 递归的方式,没有缓存的话时间复杂度度高.O(2^n)
*
* @return
* @paramn
*/
public static int climbStairs1(int n) {
if (n < 3) return n;
return climbStairs1(n - 2) + climbStairs1(n - 1);
}
方法二:动态规划
/**
* for 循环的方式,每次只保存最近的两个值
*
* @return
* @paramn
*/
public static int climbStairs2(int n) {
if (n < 3) {
return n;
}
int f1 = 1;
int f2 = 2;
int f3 = 0;
for (int i = 3; i < n + 1; i++) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}