[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?
思路:直接递归,三行代码就够了,但是会超时。所以我们需要用一个表来记录已经搜索过的路径数。
代码如下:
还有一种基于动态规划的,其实这题就是斐波那契数列的变形,其状态转移方程为
hash[i] = hash[i-1] + hash[i-2];
代码如下:
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 ; } };
相关文章推荐
- Train Problem I(杭电1022)(栈的应用)
- NSLayoutConstraint的简单应用
- Contains Duplicate II
- Daily Scrum NO.10
- C++迭代器失效http://blog.csdn.net/vipvipvip/article/details/6295973
- Daily Scrumming* 2015.12.21(Day 13)
- Yocto tips (14): Yocto中编译链的配置变更(tuning)
- 认识retain copy assign strong weak 的区别
- LeetCode 11 - Container With Most Water
- 使用Commons Email发送邮件
- 让机器人模块 PyAIML 平滑处理中文
- ACboy needs your help again!(杭电1702)(栈和队列的基础应用)
- 多线程wait-notify;notifyall.sleep
- SHU1952 Odd Pairs(维护前缀和)
- 派生类到基类的转换 和基类到派生类的转换 http://blog.csdn.net/wyyzsl212328/article/details/8263959
- 博弈算法实现简单五子棋
- MHA自动Failover过程解析(updated)(转)
- postfix mail command not found
- “Operation could not be completed. (SKErrorDomain error 0.)”
- 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法