【LEETCODE】70-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?


http://www.zhihu.com/question/23995189

什么是动态规划?动态规划的意义是什么?
动态规划的本质,是对问题状态的定义和状态转移方程的定义。
如何拆分问题,才是动态规划的核心。
而拆分问题,靠的就是状态的定义和状态转移方程的定义。
要解决这个问题,我们首先要定义这个问题和这个问题的子问题
叫做对状态的定义。
上述状态定义好之后,状态和状态之间的关系式,就叫做状态转移方程。


参考:

http://www.cnblogs.com/zuoyuan/p/3753553.html

如果有n个台阶,那么走完n个台阶的方式有f(n)种。

而走完n个台阶有两种方法,先走完n-2个台阶,然后跨2个台阶;

先走完n-1个台阶,然后跨1个台阶。所以f(n) = f(n-1) + f(n-2)。



class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        
        dp=[1 for i in range(n+1)]
        
        for i in range(2,n+1):
            dp[i]=dp[i-1]+dp[i-2]
            
        return dp[n]


你可能感兴趣的:(LeetCode,python)