LeetCode笔记——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 阶

思路一:假设有n级台阶,则n级台阶的走法等于n-1级台阶的走法加上n-2级台阶的走法。使用数组ways存放这两种走法。

代码:

class Solution {
    public int climbStairs(int n) {
       int[]ways={1,1};
        for(int i=1;i         {
            int temp=ways[1];
            ways[1]=ways[1]+ways[0];
            ways[0]=temp;
        }
        return ways[1];
    }
}

思路二:n=1,走法s(1)=1;n=2,s(2)=2.当n>2时,s(n)=s(n-1)+s(n-2).整个数列满足斐波那契数列

代码:class Solution {
    public int climbStairs(int n) {
       int n1=1;
        int n2=2;
        int nf=0;
        if(n==1)
            return 1;
        if(n==2)
            return 2;
        if(n>2)
        {
            for(int i=2;i             {
                nf=n1+n2;
                n1=n2;
                n2=nf;
            }
           
        }return nf;
    }
}

以下是我自己写的代码,用来动态规划的思想,但是要特别注意一些特殊值,比如说当n=2时。

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

你可能感兴趣的:(LeetCode笔记)