题目描述:
假设你正在爬楼梯。需要n
阶你才能到达楼顶。
每次你可以爬1
或2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
- 第一阶楼梯:n =1,有一种方法 f(1)=1;
- 第二阶楼梯:n =2,有两种方法 f(2)=2;
- 当我们第一步爬了1个台阶时,我们可以有f(n-1)种方法爬到楼顶;
- 当我们第一步爬了2个台阶时,我们可以有f(n-2)种方法爬到楼顶;
- 第一步要么1个台阶要么2个台阶,所以我们共有方法:f(n)=f(n-1)+f(n-2) n>=3。
题解一(递归算法):
代码实现:
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),超出时间限制。
我们随便分析一个数字 n=6:
其中一些数字不止算了一遍,我们可以选择map集合,以n为Key,算出的值放入map的Value,计算值时先看是否存在已计算过的值,若没有去计算,放入map。
class Solution {
private Map map =new HashMap();
public int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
if(null != map.get(n)){
return map.get(n);
}else{
int result = climbStairs(n-1) +climbStairs(n-2);
map.put(n,result);
return 服务器托管网result;
}
}
}
题解二:
还是这张图:
- f(3)和f(2)可以得到 f(4);
- f(4)和f(3)可以得到 f(5);
- f(5)和f(4)可以得到 f(6);
……
class Solution {
public int climbStairs(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
int pre服务器托管网 = 2;
int prePre = 1;
int result = 0;
for(int i=3;i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Unity Undo详解 在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误。本文将详细介绍Unity Undo实现原理和使用方法,并提供多个使用例子,帮助开发者更好地理解和应用该功能。 …