[leetcode] ClimbingStairs

/**
* <pre>
* 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?
* </pre>
*/
public class ClimbingStairs {

    //Time Limit Exceeded
    public class Solution {

        public int climbStairs(int n) {
            if (n < 0)
                return 0;
            if (n == 1)
                return 1;
            if (n == 2)
                return 2;
            return climbStairs(n - 1) + climbStairs(n - 2);
        }
    }

    public class Solution2 {
        public int climbStairs(int n) {
            if (n < 0)
                return 0;
            if (n == 1)
                return 1;
            if (n == 2)
                return 2;
            int a = 1;
            int b = 2;
            int c = 0;
            for (int i = 0; i < n - 2; i++) {
                c = a + b;
                a = b;
                b = c;
            }
            return c;
        }
    }
}

你可能感兴趣的:(LeetCode)