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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

不同路径和***

發布時間:2024/4/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不同路径和*** 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態規劃

機器人從(0 , 0) 位置出發,到(m - 1, n - 1)終點。

按照動規五部曲來分析:

確定dp數組(dp table)以及下標的含義

dp[i][j] :表示從(0 ,0)出發,到(i, j) 有dp[i][j]條不同的路徑。

確定遞推公式

想要求dp[i][j],只能有兩個方向來推導出來,即dp[i - 1][j] 和 dp[i][j - 1]。

此時在回顧一下 dp[i - 1][j] 表示啥,是從(0, 0)的位置到(i - 1, j)有幾條路徑,dp[i][j - 1]同理。

那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因為dp[i][j]只有這兩個方向過來。

dp數組的初始化

如何初始化呢,首先dp[i][0]一定都是1,因為從(0, 0)的位置到(i, 0)的路徑只有一條,那么dp[0][j]也同理。

確定遍歷順序

這里要看一下遞歸公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是從其上方和左方推導而來,那么從左到右一層一層遍歷就可以了。

這樣就可以保證推導dp[i][j]的時候,dp[i - 1][j] 和 dp[i][j - 1]一定是有數值的。

舉例推導dp數組

時間復雜度:O(m * n) 空間復雜度:O(m * n) class Solution { public:int uniquePaths(int m, int n) {int dp[m][n];for(int ii=0;ii<n;ii++) dp[0][ii]=1;for(int jj=0;jj<m;jj++) dp[jj][0]=1;for(int ii=1;ii<m;ii++){for(int jj=1;jj<n;jj++){dp[ii][jj]=dp[ii][jj-1]+dp[ii-1][jj];}}return dp[m-1][n-1];} }; class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m; i++) dp[i][0] = 1;for (int j = 0; j < n; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];} };

總結

以上是生活随笔為你收集整理的不同路径和***的全部內容,希望文章能夠幫你解決所遇到的問題。

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