C++實現(xiàn)LeetCode(62.不同的路徑)
[LeetCode] 62. Unique Paths 不同的路徑
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique paths are there?

Above is a 7 x 3 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
Example 1:
Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -> Right -> Down
2. Right -> Down -> Right
3. Down -> Right -> Right
Example 2:
Input: m = 7, n = 3
Output: 28
這道題讓求所有不同的路徑的個數(shù),一開始還真把博主難住了,因為之前好像沒有遇到過這類的問題,所以感覺好像有種無從下手的感覺。在網(wǎng)上找攻略之后才恍然大悟,原來這跟之前那道 Climbing Stairs 很類似,那道題是說可以每次能爬一格或兩格,問到達頂部的所有不同爬法的個數(shù)。而這道題是每次可以向下走或者向右走,求到達最右下角的所有不同走法的個數(shù)。那么跟爬梯子問題一樣,需要用動態(tài)規(guī)劃 Dynamic Programming 來解,可以維護一個二維數(shù)組 dp,其中 dp[i][j] 表示到當(dāng)前位置不同的走法的個數(shù),然后可以得到狀態(tài)轉(zhuǎn)移方程為: dp[i][j] = dp[i - 1][j] + dp[i][j - 1],這里為了節(jié)省空間,使用一維數(shù)組 dp,一行一行的刷新也可以,代碼如下:
解法一:
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> dp(n, 1);
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
dp[j] += dp[j - 1];
}
}
return dp[n - 1];
}
};
這道題其實還有另一種很數(shù)學(xué)的解法,實際相當(dāng)于機器人總共走了 m + n - 2步,其中 m - 1 步向右走,n - 1 步向下走,那么總共不同的方法個數(shù)就相當(dāng)于在步數(shù)里面 m - 1 和 n - 1 中較小的那個數(shù)的取法,實際上是一道組合數(shù)的問題,寫出代碼如下:
解法二:
class Solution {
public:
int uniquePaths(int m, int n) {
double num = 1, denom = 1;
int small = m > n ? n : m;
for (int i = 1; i <= small - 1; ++i) {
num *= m + n - 1 - i;
denom *= i;
}
return (int)(num / denom);
}
};
到此這篇關(guān)于C++實現(xiàn)LeetCode(62.不同的路徑)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)不同的路徑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
QT連接SQLServer數(shù)據(jù)庫的實現(xiàn)
要使用Qt連接SQL Server數(shù)據(jù)庫,需要使用Qt提供的SQL模塊和SQL Server驅(qū)動程序,具有一定的參考價值,感興趣的可以了解一下2023-09-09
C++自帶的sort函數(shù)如何對vector容器元素進行排序
這篇文章主要介紹了C++自帶的sort函數(shù)如何對vector容器元素進行排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
C++ 17轉(zhuǎn)發(fā)一個函數(shù)調(diào)用的完美實現(xiàn)
這篇文章主要給大家介紹了關(guān)于C++ 17如何轉(zhuǎn)發(fā)一個函數(shù)調(diào)用的完美實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++17具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
C語言素數(shù)(質(zhì)數(shù))判斷的3種方法舉例
這篇文章主要給大家介紹了關(guān)于C語言素數(shù)(質(zhì)數(shù))判斷的3種方法,質(zhì)數(shù)是只能被1或者自身整除的自然數(shù)(不包括1),稱為質(zhì)數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11
C語言入門篇--sizeof與strlen基礎(chǔ)理論
本篇文章是c語言基礎(chǔ)篇,主要為大家介紹了C語言的sizeof與strlen的基本理論知識,希望可以幫助大家快速入門c語言的世界,更好的理解c語言2021-08-08

