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

[leetcode] 70. Climbing Stairs 解题报告

2015-12-22 05:24 531 查看
题目链接:https://leetcode.com/problems/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 DFS(vector<int>& hash, int n)
{
if(hash
!= -1)
return hash
;
int step1 = DFS(hash, n-1);
if(hash[n-1] == -1)
hash[n-1] = step1;
int step2 = DFS(hash, n-2);
if(hash[n-2] == -1)
hash[n-2] = step2;
return step1 + step2;
}
int climbStairs(int n) {
vector<int> hash(n+1, -1);
hash[1] = 1;
hash[2] = 2;
return DFS(hash, n);
}
};


还有一种基于动态规划的,其实这题就是斐波那契数列的变形,其状态转移方程为

hash[i] = hash[i-1] + hash[i-2];

代码如下:

class Solution {
public:
int climbStairs(int n) {
if(n<1) return 0;
vector<int> hash(n+1, 1);
for(int i = 2; i <= n; i++)
hash[i] = hash[i-1] + hash[i-2];
return hash
;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: