国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode刷題筆記【30】:動(dòng)態(tài)規(guī)劃專(zhuān)題-2(不同路徑、不同路徑 II)

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode刷題筆記【30】:動(dòng)態(tài)規(guī)劃專(zhuān)題-2(不同路徑、不同路徑 II)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前置知識(shí)

參考前文

參考文章:
LeetCode刷題筆記【29】:動(dòng)態(tài)規(guī)劃專(zhuān)題-1(斐波那契數(shù)、爬樓梯、使用最小花費(fèi)爬樓梯)

62.不同路徑

題目描述

LeetCode刷題筆記【30】:動(dòng)態(tài)規(guī)劃專(zhuān)題-2(不同路徑、不同路徑 II),LeetCode刷題筆記,leetcode,筆記,動(dòng)態(tài)規(guī)劃,算法,c++,貪心算法

LeetCode鏈接:https://leetcode.cn/problems/unique-paths/description/

解題思路

動(dòng)態(tài)規(guī)劃: 創(chuàng)建m×n的數(shù)組, 對(duì)應(yīng)這個(gè)地圖, 數(shù)組val表示有幾種方法可以走到這一格
最開(kāi)始, 第一行和第一列val都是1, 然后依次遍歷更新val
每一格的val是其上和左格子的和

代碼

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> map(m, vector<int>(n));
        for(int i=0; i<n; i++){
            map[0][i] = 1;
        }
        for(int i=0; i<m; i++){
            map[i][0] = 1;
        }
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                map[i][j] = map[i-1][j] + map[i][j-1];
            }
        }
        return map[m-1][n-1];
    }
};

63. 不同路徑 II

題目描述

LeetCode刷題筆記【30】:動(dòng)態(tài)規(guī)劃專(zhuān)題-2(不同路徑、不同路徑 II),LeetCode刷題筆記,leetcode,筆記,動(dòng)態(tài)規(guī)劃,算法,c++,貪心算法

LeetCode鏈接:https://leetcode.cn/problems/unique-paths-ii/description/

障礙信息傳遞法(比較復(fù)雜)

參考<62. 不同路徑>
動(dòng)態(tài)規(guī)劃, 先把石頭初始化為INT_MAX(并且初始化過(guò)程中前面一個(gè)是INT_MAX, 那他自己也是INT_MAX)

遞推遍歷的過(guò)程中加一個(gè)判斷
① 如果左和上都是INT_MAX, 那么本位置也是INT_MAX
② 如果上/左有一個(gè)是INT_MAX, 那么val是另一個(gè)非INT_MAX
③ 正常遞推

class Solution {
private:
    int maxNum = INT_MAX;
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        for(int i=0; i<obstacleGrid.size(); ++i){
            for(int j=0; j<obstacleGrid[0].size(); ++j){
                if(obstacleGrid[i][j]==1)
                    obstacleGrid[i][j] = maxNum;
            }
        }

        if(obstacleGrid[0][0] != maxNum)
            obstacleGrid[0][0] = 1;
        for(int i=1; i<obstacleGrid[0].size(); ++i){
            if(obstacleGrid[0][i-1]==maxNum)
                obstacleGrid[0][i] = maxNum;
            if(obstacleGrid[0][i] != maxNum)
                obstacleGrid[0][i] = 1;
        }
        for(int i=1; i<obstacleGrid.size(); ++i){
            if(obstacleGrid[i-1][0]==maxNum)
                obstacleGrid[i][0] = maxNum;
            if(obstacleGrid[i][0] != maxNum)
                obstacleGrid[i][0] = 1;
        }

        for(int i=1; i<obstacleGrid.size(); ++i){
            for(int j=1; j<obstacleGrid[0].size(); ++j){
                if(obstacleGrid[i][j]==maxNum)
                    continue;
                int left = obstacleGrid[i-1][j];
                int over = obstacleGrid[i][j-1];
                if(left==maxNum && over==maxNum){
                    obstacleGrid[i][j] = maxNum;
                }else if(left==maxNum || over==maxNum){
                    obstacleGrid[i][j] = min(left, over);
                }else{
                    obstacleGrid[i][j] = left + over;
                }
            }
        }

        if(obstacleGrid.back().back()==maxNum)
            return 0;
        else
            return obstacleGrid.back().back();
    }
};

這樣做相當(dāng)于是如果在過(guò)程中遇到了障礙物, 就把這個(gè)障礙物的信息繼續(xù)往后傳遞, 一直到遍歷結(jié)束.

這樣當(dāng)然可以解決問(wèn)題, 并且整個(gè)遍歷的過(guò)程也非常符合手工推導(dǎo)的直覺(jué).
但是落實(shí)到代碼層面的話, 不管是初始化的過(guò)程, 推導(dǎo)的過(guò)程, 還是最后得出結(jié)果的步驟, 都會(huì)變得更加繁瑣, 不夠簡(jiǎn)潔.

被障礙物阻擋后直接清空計(jì)數(shù)法(更簡(jiǎn)潔)

另一種思路: 將obstacleGrid試做參考, 自己新建一個(gè)map;

在遍歷過(guò)程中如果當(dāng)前位置有障礙物, 那么就直接給當(dāng)前位置賦值0(清空前面的累計(jì)計(jì)數(shù));
其含義也可以理解為: 有0種方法可以走到當(dāng)前位置.

在初始化時(shí), 遇到障礙物, 直接停止初始化.

class Solution {
private:
    int maxNum = INT_MAX;
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size();
        int n=obstacleGrid[0].size();
        if(obstacleGrid[0][0]==1 || obstacleGrid[m-1][n-1]==1)//一些trick, 起點(diǎn)終點(diǎn)處有障礙物就沒(méi)法走了
            return 0;
        vector<vector<int>> map(m, vector<int>(n));
        for(int i=0; i<n; i++){
            if(obstacleGrid[0][i]==1)
                break;
            map[0][i] = 1;
        }
        for(int i=0; i<m; i++){
            if(obstacleGrid[i][0]==1)
                break;
            map[i][0] = 1;
        }
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                if(obstacleGrid[i][j]==1)
                    continue;
                map[i][j] = map[i-1][j] + map[i][j-1];
            }
        }
        return map[m-1][n-1];
    }
};

總結(jié)

動(dòng)態(tài)規(guī)劃做起來(lái)真的比貪心舒服很多很多, 有邏輯的通暢感覺(jué).

今天第二道題是第一道題的延伸拓展, 我雖然也做出來(lái)了, 但是用程序強(qiáng)行實(shí)現(xiàn)的手工推導(dǎo)思路, 并沒(méi)有貼合dp數(shù)組的定義與實(shí)質(zhì).
導(dǎo)致算法不夠簡(jiǎn)潔有力.
或許以后隨著練習(xí), 可以逐漸加強(qiáng).

本文參考:
不同路徑
不同路徑 II文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707098.html

到了這里,關(guān)于LeetCode刷題筆記【30】:動(dòng)態(tài)規(guī)劃專(zhuān)題-2(不同路徑、不同路徑 II)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 力扣算法刷題Day39|動(dòng)態(tài)規(guī)劃:不同路徑 I&II

    力扣題目:#62.不同路徑 刷題時(shí)長(zhǎng):參考題解后10min 解題方法:動(dòng)規(guī) 復(fù)雜度分析 時(shí)間O(m*n) 空間O(m*n) 問(wèn)題總結(jié) 初始化二維數(shù)組的python語(yǔ)法:i 對(duì)應(yīng) m,j 對(duì)應(yīng)n 二維遍歷順序,從上到下從左到右通過(guò)兩層for循環(huán)實(shí)現(xiàn),其中startindex應(yīng)為1 本題收獲 動(dòng)規(guī)思路 確定dp數(shù)組及下標(biāo)的含義

    2024年02月12日
    瀏覽(18)
  • leetcode63. 不同路徑 II(動(dòng)態(tài)規(guī)劃-java)

    leetcode63. 不同路徑 II(動(dòng)態(tài)規(guī)劃-java)

    來(lái)源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/unique-paths-ii 一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish”)。 現(xiàn)在考慮網(wǎng)格中有障礙物。

    2024年02月11日
    瀏覽(24)
  • 【算法|動(dòng)態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    【算法|動(dòng)態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    個(gè)人主頁(yè):平行線也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專(zhuān)欄【手撕算法系列專(zhuān)欄】【LeetCode】 ??本專(zhuān)欄旨在提高自己算法能力的同時(shí),記錄一下自己的學(xué)習(xí)過(guò)程,希望對(duì)大家有所幫助 ??希望我們一起努力、成長(zhǎng),共同進(jìn)步。

    2024年02月16日
    瀏覽(20)
  • 【算法|動(dòng)態(tài)規(guī)劃系列No.5】leetcode62. 不同路徑

    【算法|動(dòng)態(tài)規(guī)劃系列No.5】leetcode62. 不同路徑

    個(gè)人主頁(yè):平行線也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專(zhuān)欄【手撕算法系列專(zhuān)欄】【LeetCode】 ??本專(zhuān)欄旨在提高自己算法能力的同時(shí),記錄一下自己的學(xué)習(xí)過(guò)程,希望對(duì)大家有所幫助 ??希望我們一起努力、成長(zhǎng),共同進(jìn)步。

    2024年02月12日
    瀏覽(23)
  • 【算法專(zhuān)題】動(dòng)態(tài)規(guī)劃之路徑問(wèn)題

    【算法專(zhuān)題】動(dòng)態(tài)規(guī)劃之路徑問(wèn)題

    題目鏈接 - Leetcode -62.不同路徑 Leetcode -62.不同路徑 題目:一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish” )。 問(wèn)總共有多少條不同的路徑? 示

    2024年01月24日
    瀏覽(25)
  • 刷題之動(dòng)態(tài)規(guī)劃-路徑問(wèn)題

    刷題之動(dòng)態(tài)規(guī)劃-路徑問(wèn)題

    大家好,我是jiantaoyab,開(kāi)始刷動(dòng)態(tài)規(guī)劃的題目了,要特別注意初始化的時(shí)候給什么值。 動(dòng)態(tài)規(guī)劃5個(gè)步驟 狀態(tài)表示 :dp數(shù)組中每一個(gè)下標(biāo)對(duì)應(yīng)值的含義是什么- dp[i]表示什么 狀態(tài)轉(zhuǎn)移方程: dp[i] 等于什么 1 和 2 是動(dòng)態(tài)規(guī)劃的核心步驟,第三步是初始化,保證填表的時(shí)候不越界

    2024年04月13日
    瀏覽(18)
  • 【動(dòng)態(tài)規(guī)劃專(zhuān)欄】專(zhuān)題二:路徑問(wèn)題--------6.地下城游戲

    【動(dòng)態(tài)規(guī)劃專(zhuān)欄】專(zhuān)題二:路徑問(wèn)題--------6.地下城游戲

    本專(zhuān)欄內(nèi)容為:算法學(xué)習(xí)專(zhuān)欄,分為優(yōu)選算法專(zhuān)欄,貪心算法專(zhuān)欄,動(dòng)態(tài)規(guī)劃專(zhuān)欄以及遞歸,搜索與回溯算法專(zhuān)欄四部分。 通過(guò)本專(zhuān)欄的深入學(xué)習(xí),你可以了解并掌握算法。 ??博主csdn個(gè)人主頁(yè):小小unicorn ?專(zhuān)欄分類(lèi):動(dòng)態(tài)規(guī)劃專(zhuān)欄 ??代碼倉(cāng)庫(kù):小小unicorn的代碼倉(cāng)庫(kù)??

    2024年02月22日
    瀏覽(30)
  • 動(dòng)態(tài)規(guī)劃——不同路徑II

    63. 不同路徑 II - 力扣(LeetCode)?編輯https://leetcode.cn/problems/unique-paths-ii/description/ https://leetcode.cn/problems/unique-paths-ii/description/ 問(wèn)題描述:一個(gè)機(jī)器人位于一個(gè)?m x n?網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)

    2024年01月16日
    瀏覽(24)
  • 【力扣】62. 不同路徑 <動(dòng)態(tài)規(guī)劃>

    【力扣】62. 不同路徑 <動(dòng)態(tài)規(guī)劃>

    一個(gè)機(jī)器人位于一個(gè) m m m x n n n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish” )。問(wèn)總共有多少條不同的路徑? 示例 1: 輸入:m = 3, n = 7 輸出:28 示例 2: 輸入:m

    2024年02月10日
    瀏覽(20)
  • 力扣62.不同路徑(動(dòng)態(tài)規(guī)劃)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包