思路:一次爬一个或者一次爬两个楼梯,终止条件,即是当n=1或n=2时,完成操作,当n>2时,总方法就等于一次爬一个楼梯的方法数加上一次爬两个楼梯的方法数。
解法一:递归解法
if(n == 1)
return 1;
if(n == 2)
return 2;
return climbStairs(n-1) + climbStairs(n-2);
}
值得一提的是,虽然它简单,但是它的时间复杂度超过,超出时间限制
解法一的不可行性主要是重复计算引起的,避免或减少重复计算实现代码。使用hashmap保存已求解的值,此时的时间复杂度为O(n)。
解法二:hashmap(Java)
class Solution
{
private Map<Integer,Integer> storeMap = new HashMap<>();
public int climbStairs(int n)
{
if(n == 1)
return 1;
if(n == 2)
return 2;
if(null != storeMap.get(n))
return storeMap.get(n);
else
{
int result = climbStairs(n - 1) + climbStairs(n - 2);
storeMap.put(n, result);
return result;
}
}
}
解法三:循环
int climbStairs(int n) {
//循环
if(n==1)
return 1;
if(n==2)
return 2;
int result = 0;
int pre = 1;
int Prepre = 2;
for(int i = 3; i <= n; ++i)
{
result = pre + Prepre;
pre = Prepre;
Prepre = result;
}
return result;
}