日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode——动态规划:斐波那契数列

發(fā)布時(shí)間:2024/2/28 编程问答 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode——动态规划:斐波那契数列 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

斐波那契數(shù)列


目錄

  • 爬樓梯
  • 強(qiáng)盜搶劫
  • 強(qiáng)盜在喚環(huán)形街區(qū)搶劫
  • 信件錯(cuò)排
  • 注:具體解析請(qǐng)點(diǎn)擊鏈接進(jìn)入LeetCode題解區(qū)。


    1. 爬樓梯

    https://leetcode-cn.com/problems/climbing-stairs/solution/pa-lou-ti-by-leetcode/

    假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。

    每次你可以爬 1 或 2 個(gè)臺(tái)階。你有多少種不同的方法可以爬到樓頂呢?

    注意:給定 n 是一個(gè)正整數(shù)。

    public int climbStairs(int n) {if (n == 1) {return 1;}int[] dp = new int[n + 1];dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];} public int climbStairs2(int n) {if (n <= 2) {return n;}int pre2 = 1;int pre1 = 2;for (int i = 3; i <= n; i++) {int cur = pre1 + pre2;pre2 = pre1;pre1 = cur;}return pre1;}

    2. 強(qiáng)盜搶劫


    題目描述:搶劫一排住戶,但是不能搶鄰近的住戶,求最大搶劫量。

    定義 dp 數(shù)組用來存儲(chǔ)最大的搶劫量,其中 dp[i] 表示搶到第 i 個(gè)住戶時(shí)的最大搶劫量。
    由于不能搶劫鄰近住戶,如果搶劫了第 i -1 個(gè)住戶,那么就不能再搶劫第 i 個(gè)住戶,所以

    public int rob(int[] nums) {int pre2 = 0, pre1 = 0;for (int i = 0; i < nums.length; i++) {int cur = Math.max(pre2 + nums[i], pre1);pre2 = pre1;pre1 = cur;}return pre1;}

    3. 強(qiáng)盜在喚環(huán)形街區(qū)搶劫

    https://leetcode-cn.com/problems/house-robber-ii

    題目描述:你是一個(gè)專業(yè)的小偷,計(jì)劃偷竊沿街的房屋,每間房?jī)?nèi)都藏有一定的現(xiàn)金。這個(gè)地方所有的房屋都圍成一圈,這意味著第一個(gè)房屋和最后一個(gè)房屋是緊挨著的。同時(shí),相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會(huì)自動(dòng)報(bào)警。

    給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你在不觸動(dòng)警報(bào)裝置的情況下,能夠偷竊到的最高金額。

    public int rob(int[] nums) {if (nums == null || nums.length == 0) {return 0;}int n = nums.length;if (n == 1) {return nums[0];}return Math.max(rob(nums, 0, n - 2), rob(nums, 1, n - 1));}private int rob(int[] nums, int first, int last) {int pre=0,cur=0,tmp;for (int i = first; i <= last; i++) {tmp = cur;cur = Math.max(cur,pre+nums[i]);pre = tmp;}return cur;}

    4. 信件錯(cuò)排

    題目描述:定義一個(gè)數(shù)組 dp 存儲(chǔ)錯(cuò)誤方式數(shù)量,dp[i] 表示前 i 個(gè)信和信封的錯(cuò)誤方式數(shù)量。假設(shè)第 i 個(gè)信裝到第 j 個(gè)信封里面,而第 j 個(gè)信裝到第 k 個(gè)信封里面。

    根據(jù) i 和 k 是否相等,有兩種情況:

    • i==k,交換 i 和 k 的信后,它們的信和信封在正確的位置,但是其余 i-2 封信有 dp[i-2] 種錯(cuò)誤裝信的方式。由于 j 有 i-1 種取值,因此共有 (i-1)*dp[i-2] 種錯(cuò)誤裝信方式。
    • i != k,交換 i 和 j 的信后,第 i 個(gè)信和信封在正確的位置,其余 i-1 封信有 dp[i-1] 種錯(cuò)誤裝信方式。由于 j 有 i-1種取值,因此共有 (i-1)*dp[i-1] 種錯(cuò)誤裝信方式。

    綜上所述,錯(cuò)誤裝信數(shù)量方式數(shù)量為:

    public int errorNum(int n) {if (n == 0) {return 0;}int[] f = new int[n + 1];f[0] = 0;f[1] = 0;f[2] = 1;for (int i = 3; i <= n; i++) {f[i] = (i - 1) * f[i - 2] + (i - 1) * f[i - 1];}return f[n];}

    總結(jié)

    以上是生活随笔為你收集整理的LeetCode——动态规划:斐波那契数列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。