您的位置:首页 > 大数据 > 人工智能

leetcode 70 Climbing Stairs

2017-12-18 23:49 471 查看

leetcode 70 Climbing Stairs

假设爬到楼顶需要走n步,n为正整数。你每次只能爬一步或者两步,请问有多少种爬法。

算法

利用动态规划解题,找出状态n和状态n-1之间的关系,即状态转移方程,然后从前往后遍历一遍,求得结果。

状态n和n-1的关系

n比n-1总步数多了一步,n的爬法种数可以从n-1的爬法种数得到:

在n-1的所有爬法后再加1步

把n-1的所有以1步结尾的爬法,把最后的1步变为2步



状态转移方程:

dp(n) = dp(n-1) + ew(n-1, 1) (n>=3)

​ 2 (n=2)

​ 1 (n=1)

其中ew(n-1, 1)表示总步数为n-1步时所有爬法中以1步结尾的爬法种数,

dp(n-1)表示总步数为n-1步时所有的爬法种数。

因此在从3到n遍历的过程中,我们只需要记住每个状态下的爬法种数,以及以1步结尾的爬法种数。

Code

class Solution {
public:
int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
int lastways=2;
int lastone=1;
for(int i=3; i<=n; i++){
int nowone = lastways, nowways = lastways + lastone;
lastways = nowways;
lastone = nowone;
}
return lastways;
}
};


算法时间复杂度:O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 动态规划