LeetCode Climbing Stairs(经典动态规划)
来源:互联网 发布:知乎 发哥 编辑:程序博客网 时间:2024/06/01 12:27
传送门:
https://leetcode.com/problems/climbing-stairs/
题目大意:
题意很简单易懂,有N阶楼梯,每步只能跨一阶或者两阶,问有多少种走法。
解题思路:
这是一道很老的面试题目了,记得还在大二的时候我的C++老师曾拿这道题目来考我们班的同学,数据范围已经确定(N<=50)。我能想到的方法是组合数学,1 * x + 2 * y == 50,枚举x,排列组合,求和得到结果。当时十分钟敲完代码并且运行正确觉得自己很牛逼,现在再次看到这道题目,只能说那个时候自己年少无知。
现在再来看这道题目,怎么看都是个动态规划。当你站在第i阶台阶的时候,就只能从第i-1阶台阶或者第i-2阶台阶跨上来。所以,就有了递推公式dp[i] = dp[i - 1] + dp[i - 2]。
总结:
是不是很像斐波拉契?答案是肯定的。从斐波拉契看动态规划,斐波拉契数列是从已知状态推导到未知状态,恰恰动态规划也是这样。
动态规划推导过程:
1.构造需要推导的最终状态。
2.构造初始状态。
3.想方设法利用已知条件从已知状态推导到未知状态。
4.写出递推方程。
可能这些过程说起来比较轻松,做起来就比较困难了。所以,这里面需要大量的练习,尤其是思维的训练。
Show me the code:
/** * @param {number} n * @return {number} */var climbStairs = function(n) { var arr = [1, 2]; if (n <= 2) return arr[n - 1]; var index = 1; for (var a = 3; a <= n; ++a) { arr[index ^ 1] = arr[index] + arr[index ^ 1]; index ^= 1; } return arr[index];};
0 0
- LeetCode Climbing Stairs(经典动态规划)
- Leetcode 动态规划 Climbing Stairs
- LeetCode 746. Min Cost Climbing Stairs(动态规划)
- LeetCode-70-Climbing Stairs(动态规划)-Easy
- [leetcode]climbing-stairs 动态规划 C++
- 【Leetcode】70. Climbing Stairs 【动态规划】
- LeetCode 70. Climbing Stairs 动态规划问题
- LeetCode 70. Climbing Stairs 动态规划
- 简单动态规划 climbing-stairs
- LeetCode Climbing Stairs 递归求解和动态规划法
- LeetCode Climbing Stairs 递归求解和动态规划法
- leetcode 70.Climbing Stairs-爬楼梯|动态规划
- leetcode之70. Climbing Stairs(C++解法 动态规划思想)
- 【动态规划】Leetcode编程题解:70. Climbing Stairs
- Leetcode解题笔记 70. Climbing Stairs [Easy] 动态规划
- LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
- 动态规划——Climbing Stairs(easy,python)
- Climbing Stairs 爬楼梯方法 动态规划
- 国内领先的容器云平台和解决方案提供商有哪些
- 笨笨的SVN权限管理
- 关于硬币组合问题和DP的结合
- mysql进阶(二十二)MySQL错误之Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...中文字符输入错误
- Plus One
- LeetCode Climbing Stairs(经典动态规划)
- must have one-pixel frame that is either transparent or white
- linux下生成bmp图片的测试程序
- 贝叶斯决策-模式识别
- Jedis使用示例
- Spring2.0与Hibernate3.0的错误解决
- 解决webView显示时候加广告问题
- iOS 证书
- jQuery获取高度问题