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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少

發布時間:2024/4/19 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unique Paths

原題鏈接Unique Paths

計算從左上角有多少條不同的路徑可以到達右下角,移動方向只能是向右和向下。

對于每個位置,都有兩種移動的可能,即向右移動和向下移動。可以用深度優先(dfs)解決,同時為了解決重復計算,可以用動態規劃的思想,記錄從dp[i][j]到達右下角有多少條不同的路徑。

除了深度優先之外,可以用迭代法執行動態規劃,這樣做可以減少dp的維度,只需要一維數組即可,不過要改變dp的含義,假設當前所在位置為(m, n),那么dp[n]代表從左上角到達當前位置的不同路徑書,原因為

  • 移動方向只能向右和向下,所以只要向下移動一行,就不能再返回上一行。這說明,對于行的記錄是可以忽略的。
  • 只要遍歷每一行的每一列,不斷更新dp[n]直到到達右下角即可,假設當前在第m行的第n列,那么dp[n]表示從左上角開始移動可以有多少條不同的路徑達到第m行第n列
  • 對于每個位置,它可以從上一行的當前列向下移動到達當前位置,也可以從當前行的上一列向右移動到達當前位置
  • 所以dp[n] = dp[n] + dp[n - 1],dp[n]代表從上一行的第n列到達右下角的不同路徑數,dp[n - 1]代表從當前行的第n-1列到達右下角的不同路徑數
  • 直到遍歷到右下角,即遍歷了所有行所有列,那么dp[n]就代表從左上角到達右下角的不同路徑數

代碼如下

class Solution { public:int uniquePaths(int m, int n) {/* 到達第0行,第j列的路徑數只有1條 */vector<int> dp(n, 1);/* 這里直接忽略了第0行和第0列,原因是到達第0行和第0列的某個位置的路徑都只有1條 */for(int i = 1; i < m; ++i){for(int j = 1; j < n; ++j){/* dp[j]表示從左上角到達第i行第j列的不同路徑數 *//* 當i為m-1,j為n-1時,就是從左上角到達右下角的不同路徑數 */dp[j] = dp[j] + dp[j - 1];}}return dp[n - 1];} };

Unique Paths II

原題鏈接Unique Paths II

接著上面的問題,如果某些位置有障礙物,那么有多少條路徑可以到達右下角。
移動的過程中不能到達障礙物所在的位置。

方法和上面一樣,仍然有一維數組記錄到達某一列的不同路徑,不過需要判斷某個位置是否有障礙物,如果有,那么dp[n]為0,否則dp[n] = dp[n - 1] + dp[n]

另外,對于dp[0]要特殊處理,不能像上面一樣直接從第一行第一列開始,因為第0行第0列都可能存在障礙物導致dp[n[不是1而是0.

代碼如下

class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if(obstacleGrid.empty())return 0;int m = obstacleGrid.size();int n = obstacleGrid[0].size();/* 如果起始位置和目標位置都有障礙物,那么就不可能到達 */if(n == 0 || obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1)return 0;vector<int> dp(n);/* 到達開始位置的路徑為1 */dp[0] = 1;/* 到達第0行的某個位置的路徑,有障礙物的話后面就都是0,否則是1 */for(int i = 1; i < n; ++i)dp[i] = (obstacleGrid[0][i] == 1) ? 0 : dp[i - 1];for(int i = 1; i < m; ++i){/* 如果當前行的第0列是障礙物,那么到達當前行的第0列的路徑數為0 */if(obstacleGrid[i][0] == 1)dp[0] = 0;for(int j = 1; j < n; ++j){dp[j] = obstacleGrid[i][j] == 1 ? 0 : dp[j] + dp[j - 1];}}return dp[n - 1];} };

原題鏈接Minimum Path Sum

和上面的題一樣,只是這回要求是找到路徑長度最短的那一條,路徑長度是路徑上所有數字的和

仍然采用迭代法的動態規劃,不過要改變dp的含義,即dp[n]表示從左上角到達當前位置的最小路徑長,而不在是不同路徑數

另外,第一行和第一列不再單純的是1,而是數字累加,代表路徑長
代碼如下

class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m = grid.size();if(m == 0) { return 0; }int n = grid[0].size();if(n == 0) { return 0; }vector<int> dp(n, 0);dp[0] = grid[0][0];/* 這里第一行的路徑長要累加 */for(int i = 1; i < n; ++i)dp[i] = dp[i - 1] + grid[0][i];for(int i = 1; i < m; ++i){/* 第一列也要累加 */dp[0] += grid[i][0];for(int j = 1; j < n; ++j){/* 不再是相加,而是找到較小的那個 */dp[j] = std::min(dp[j], dp[j - 1]) + grid[i][j];}}return dp[n - 1];} };

上面三道題主要利用動態規劃的思想,另外通過迭代法簡化動態規劃數組的維度。

總結

以上是生活随笔為你收集整理的每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆影视在线免费观看 | 久久精品av | avtt香蕉久久 | 国产乱码精品一区二区三区精东 | 国产21页| 激情xxx | 欧美成人精品一区二区 | 日韩黄色一级大片 | 韩国三级hd中文字幕的背景音乐 | 成人av在线电影 | 伊人小视频 | 欧美电影一区二区三区 | 国产精品久久77777 | 挪威xxxx性hd极品 | 性生活三级视频 | 亚洲成人视屏 | 久久一二三四区 | 超碰福利在线观看 | 欧美伊人久久 | 国产激情综合 | av网天堂 | 男人在线视频 | 日韩在线导航 | 波多野结衣电车 | 中文字幕天堂av | 色偷偷888欧美精品久久久 | 碰碰久久 | 五月天啪啪 | 一区三区视频在线观看 | 亚洲AV无码成人精品区在线观 | 国内自拍网站 | 亚洲AV午夜福利精品一级无码 | 91蜜桃传媒精品久久久一区二区 | 成人欧美一区二区三区小说 | 青青青手机在线视频 | 亚洲一区二区三区精品视频 | 日本少妇裸体做爰高潮片 | 国产精品入口夜色视频大尺度 | 亚洲综合情 | 久久久久99精品成人片毛片 | 成人在线日韩 | 国内偷拍一区二区 | 精品伊人 | 婷婷射图| 真实的国产乱xxxx在线 | 免费成人深夜小野草 | 麻豆av电影在线观看 | 午夜剧场免费在线观看 | 日韩视频精品一区 | 夜夜操操操| 麻豆久久久午夜一区二区 | 久久久久久91 | 乱淫的女高中暑假调教h | 亚洲精品视频一区二区三区 | 美女啪啪无遮挡 | 久久青青草原亚洲av无码麻豆 | 欧美日韩高清丝袜 | 狠狠操天天射 | 一级片一区 | 免费久久精品视频 | 日本在线观看网站 | 禁漫天堂下载18 | 色a视频| 蜜桃色av| 欧美在线一区二区 | 黄色动漫在线免费观看 | 2024av视频 | 国内外成人在线视频 | 中国美女一级看片 | 国产精品视频一二三区 | 超级变态重口av番号 | xxxx视频在线 | 中文字幕一区二区不卡 | 黄色三级图片 | 中文乱码人妻一区二区三区视频 | 欧美日韩成人一区二区三区 | 四虎一国产精品一区二区影院 | av免费看网站 | 在线免费亚洲 | 欧洲黄色录像 | 精品九九久久 | 欧美在线观看一区二区 | 亚洲青春草 | 国产一级做a爱免费视频 | 在线亚洲天堂 | 精品国产99 | 国产精品久久一区二区三区动 | 亚洲精品自拍视频 | 日日碰狠狠添天天爽无码av | 亚洲三级中文字幕 | 欧美韩国一区 | 国产资源第一页 | 精品国产高清在线观看 | 一区二区三区国产视频 | 欧美专区 日韩专区 | 末路1997全集免费观看完整版 | 一级片少妇| 天天干天天插天天射 | 黑人毛片网站 |