Leetcode 70. Climbing Stairs-每次能走1步或2步台阶,输入n,求总的方法数

版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/85840614

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
public class Leetcode_70_ClimbingStairs {

    public static void main(String[] args) {
        Leetcode_70_ClimbingStairs leetcode_70_climbingStairs = new Leetcode_70_ClimbingStairs();
        System.out.println(leetcode_70_climbingStairs.climbStairs(5));//8
    }

//    1   1
//    2   2
//    3   3
//    4   5
//    5   8 // 8=5+3
    public int climbStairs2(int n) {
        if (n == 1 || n == 2) {
            return n;
        }
        int a = 1;
        int b = 2;
        int c = 0;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }

    /**
     * 优化之后
     * @param n
     * @return
     */
    public int climbStairs(int n) {
        int a = 0;
        int b = 1;
        int c = 0;
        for (int i = 1; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}

Runtime: 3 ms, faster than 41.36% of Java online submissions for Climbing Stairs.

方法2:

    /**
     * 分治法一般使用递归
     *
     * @param n
     * @return
     */
    //Time Limit Exceeded
    public int climbStairs4(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        return climbStairs(n - 1) + climbStairs(n - 2);
    }

Time Limit Exceeded

猜你喜欢

转载自blog.csdn.net/u010002184/article/details/85840614
今日推荐