-
Notifications
You must be signed in to change notification settings - Fork 634
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
字节&leetcode70:爬楼梯问题 #90
Comments
解法:动态规划动态规划(Dynamic Programming,DP)是一种将复杂问题分解成小问题求解的策略,但与分治算法不同的是,分治算法要求各子问题是相互独立的,而动态规划各子问题是相互关联的。
我们使用动态规划求解问题时,需要遵循以下几个重要步骤:
第一步:定义子问题 如果用 第二步:实现需要反复执行解决的子子问题部分 dp[n] = dp[n−1] + dp[n−2] 第三步:识别并求解出边界条件 // 第 0 级 1 种方案
dp[0]=1
// 第 1 级也是 1 种方案
dp[1]=1 最后一步:把尾码翻译成代码,处理一些边界情况 let climbStairs = function(n) {
let dp = [1, 1]
for(let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[n]
} 复杂度分析:
优化空间复杂度: let climbStairs = function(n) {
let res = 1, n1 = 1, n2 = 1
for(let i = 2; i <= n; i++) {
res = n1 + n2
n1 = n2
n2 = res
}
return res
} 空间复杂度:O(1) |
|
这个问题好像就是斐波那契数列,动态规划是一种解法,也可以用尾递归
|
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意: 给定 n 是一个正整数。
示例 1:
示例 2:
附赠leetcode地址:leetcode
The text was updated successfully, but these errors were encountered: