LeetCode Everyday -- 70

来源:互联网 发布:摄像安卓软件 编辑:程序博客网 时间:2024/05/21 08:35

Climbing Stairs

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?

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

解题思路:题目是一个动态规划的问题,因为每次只能走1或2步,所以到达最后一步之前有两种选择。设d(n)是到达第n级阶梯的解,则d(n) = d(n-1) + 1 + d(n-2) + 2,所以可以通过递归推出d(n),跟斐波那契数列很像,同样,如果n比较大,递归效率会很低,所以采用动态规划方法,将d(n-1)和d(n-2)记录下来,推出d(n).

0 0
原创粉丝点击