70,爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

斐波那契额数列

1: 1

2: 2

3: 3

4: 5

5: 8

6: 13

class Solution {
    public int climbStairs(int n) {
        if (n == 1)
            return 1;
        else if (n == 2)
            return 2;
        else
            return climbStairs(n-1)+climbStairs(n-2);
    }
}

递归方法超时了

然后只能用数组方法解决

class Solution {
    public int climbStairs(int n) {
        if(n==1) return 1;
        else if(n==2) return 2;
        else{
            int[] ans = new int[n];         
             ans[0]=1;
             ans[1]=2;
            for(int i=2;i<n;i++)
            {
                ans[i]=ans[i-1]+ans[i-2];
            }
          return  ans[n-1];  
        }
      
    }
}

采用动态规划,空间也省了

class Solution {
    public int climbStairs(int n) {
//      采用动态规划
        if(n==1) return 1;
        else if(n==2) return 2;
        else{
                
             int a=1;
             int b=2;
            int tmp=0;
            for(int i=2;i<n;i++)
            {  tmp=a+b;
               a=b;
               b=tmp;
            }
          return  tmp;  
        }
      
    }
}

猜你喜欢

转载自blog.csdn.net/huanghuansen/article/details/83621676