乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?
說明:m 和 n 的值均不超過 100。
示例 1:輸入: m = 3, n = 2
輸出: 3
解釋:從左上角開始,總共有 3 條路徑可以到達右下角。
向右 -> 向右 -> 向下
向右 -> 向下 -> 向右
向下 -> 向右 -> 向右
示例 2:輸入: m = 7, n = 3
輸出: 28
public
class
p62_uniquepaths
if(m<
2||n<2)
int min = math.
min(m-
1,n-1)
;return
arrange
(m+n-
2,min)
/arrange
(min,min);}
private
intarrange
(int a,
int b)
return a*
arrange
(a-1
,b-1);
}}
思想:
利用和數學中的排列組合思想,在mxn
的方格中一共需要走m+n-2
步,從中挑選出n-1
步向右即可。即
c(m+n-2,n-1)。此做法會導致階乘時整數溢位。
int count =0;
public
intuniquepaths
(int m,
int n)
private
void
gettoend
(int m,
int n)
else
if(m==
1||n==1)
}
思路:
遞迴做法,先向右遞迴,在向下遞迴,此做法會超時。
public
class
p62_uniquepaths3
for(
int i =
0;i)for
(int i =
1;ireturn box[m-1]
[n-1];
}}
思路:動態規劃
定義box
陣列,box[i-1][j-1]
表示ixj
的方格所有方法條數。
box[0][j]
,box[i][0]
均為1
box[i][j]
=box[i-1][j]
+box[i][j-1]
依次遞推
leetcode習題集 63 不同路徑 II
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...
Leetcode習題集 鍊錶
這裡記錄一些我刷題的思路方便之後進行複習重溫,同時也方便進行新增 p141 環形鍊錶 class solution listnode reverse listnode head return pre 使用翻轉鍊錶,判斷返回的指標與傳進的指標是否相同,時間複雜度是o n 可能 空間複雜度是o 1 cl...
leetcode習題集 54 螺旋矩陣
給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...