LeetCode 70. Climbing Stairs

来源:互联网 发布:淘宝退款成功后钱在哪 编辑:程序博客网 时间:2024/06/11 21:14

题目

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.

思考

可以先将步数少的情况列出来,寻找规律。

n = 1
所有可能:1
一共1种

n = 2
所有可能:1, 1 / 2
一共2种

n = 3
所有可能:1, 2 / 1, 1, 1 / 2, 1
一共3种

n = 4
所有可能:1, 1, 1, 1 / 2, 1, 1 / 1, 2, 1 / 1, 1, 2 / 2, 2
一共5种

n = 5
所有可能:1, 1, 1, 1, 1 / 2, 1, 1, 1 / 1, 2, 1, 1 / 1, 1, 2, 1 / 1, 1, 1, 2 / 1, 2, 2 / 2, 1, 2 / 2, 2, 1
一共8种

……

n 1 2 3 4 5 6 7 … y 1 2 3 5 8 13 21 …

由上面表格看出,y(n) = y(n-2) + y(n-1), n >= 3

我的答案

c++

class Solution {public:    int climbStairs(int n) {        if (n == 0 || n == 1 || n == 2 || n == 3) {            return n;        }        int a = 2, b = 3, result = 0;        for (int i = 4; i <= n; i++) {            result = a + b;            a = b;            b = result;        }        return result;    }};