LeetCode之Climbing Stairs

来源:互联网 发布:日本留学中介知乎 编辑:程序博客网 时间:2024/06/05 10:47

本题的意思是有一个n阶的梯子,每次只能爬1阶或2阶,求爬到梯子顶端总共可能的情况有多少。

我采用动态规划的算法解决此题。假设爬到一个阶为n的梯子的顶端总共可能的情况是f(n)。那么,按照爬到梯子顶端最后一步可能是1阶或2阶的想法,可以分成两种情况,不难想到:f(n) = f(n - 1) + f(n - 2),f(n - 1) = f(n - 2) + f(n - 3),…,f(3) = f(2) + f(1);而f(1) = 1,f(2) = 2。这样递推下去,最后求出f(n),就是此题的解。

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


0 0
原创粉丝点击