亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第38天 數據結構和算法

动态规划

什么是动态规划

  • 动态规划和分而治之一样,也是一种算法思想。
  • 动态规划将一个问题分解成互相重叠的子问题,通过反复解决子问题来解决原来的问题。
  • 动态规划是分解成互相重叠的子问题;分而治之是分解为相互独立的子问题

使用场景(斐波那契数列)

图片描述

  • 定义子问题:F(n )= F(n-1) + F(n-2)
  • 从2到n,反复执行上述公式
function fibonacci (n) {
 if ( n <= 1 ) {return n};
 return fibonacci(n - 1) + fibonacci(n - 2);
}

爬楼梯(leetcode - 70)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

思路(动态规划)

  • 因为每次你可以爬 1 或 2 个台阶;所以爬n个台阶的方法数等于爬n-1方法数和爬n-2方法数之和
  • 可以采用动态规划 即 F(n) = F(n-1) + F(n-2)
var climbStairs = function(n) {
    let dp0 = 0, dp1= 0, res = 1;
    for(let i=1;i<=n; i++) {
        dp0 = dp1;
        dp1 = res;
        res = dp0 + dp1
    }
    return res;
};

时间复杂度:O(n)
空间复杂度:O(1)

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
3
獲贊與收藏
9

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消