70爬楼梯问题求解
Posted super码王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了70爬楼梯问题求解相关的知识,希望对你有一定的参考价值。
题目描述
思路分析
当阶数为 1 时 ,解法为 1
当阶数为 2 时 ,解法为 2
当阶数为 3 时 ,解法为 3
当阶数为 4 时 ,解法为 5
......
很明显可以分析出:一下公式:
代码实现:
- 递归法
class Solution
public int climbStairs(int n)
if(n == 1) return 1;
if(n == 2) return 2;
return climbStairs(n-1) + climbStairs(n-2);
缺点:时间复杂度为O(n^2),存在重复计算,如下图:f(4) 和 f(3)
- 递归法(优化,解决重复计算问题)
class Solution
//创建一个 map 专门存储 已计算的结果,防止重复计算
private Map<Integer,Integer> map = new HashMap<>();
public int climbStairs(int n)
if(n == 1) return 1;
if(n == 2) return 2;
//先从 map 中查找,如果能找到,就不使用递归来计算
if(null != map.get(n))
return map.get(n);
else
int result = climbStairs(n-1) + climbStairs(n-2);
map.put(n,result);
return result;
- 循环法
class Solution
public int climbStairs(int n)
if(n == 1) return 1;
if(n == 2) return 2;
int result = 0;
int pre = 2;
int prePre = 1;
//由题目可知,n=1 => 1, n=2 => 2,所以从 n=3 开始
for(int i = 3;i <= n;i++)
result = pre + prePre;
prePre = pre;
pre = result;
return result;
运行结果展示
以上是关于70爬楼梯问题求解的主要内容,如果未能解决你的问题,请参考以下文章