思路1:最容易想的思路就是遞歸了变秦,結(jié)果也很容易想成榜,超時(shí)了。蹦玫。
int uniquePaths(int m, int n){
int a[m + 1][n + 1];
if(m < 1 || n < 1)
return 0;
else if(m == 1 || n == 1)
return 1;
return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}
思路2:對(duì)于一個(gè)mxn的方格赎婚,比如對(duì)于位置第2行第2列的方格,可以從第1行第2列右移樱溉,也可以從第2行第1列下移挣输,而對(duì)于位置第1列第2行的方格,只能從第1列第1行的位置下移福贞,而不能從第0列第2行右移撩嚼,因?yàn)樵浇缌耍煌硗诹保瑢?duì)于第2列第1行的位置完丽,也只能從第1列第1行的位置右移,無(wú)法從第2列第0行下移拇舀,也是因?yàn)樵浇缌寺咦濉Mㄟ^(guò)上述分析總結(jié),將方格分成兩種情況:1骄崩、對(duì)于第一列和第一行的所有方格聘鳞,只有一種走法薄辅;2、對(duì)于其他行列的普通方格抠璃,有兩種走法站楚,可以用動(dòng)態(tài)規(guī)劃的思路解決。
int uniquePaths(int m, int n){
int a[m + 1][n + 1];
for(int i = 1; i <= m; i++){
a[i][1] = 1;
}
for(int j = 1; j <= n; j++){
a[1][j] = 1;
}
for(int i = 2; i <= m; i++){
for(int j = 2; j <= n; j++){
a[i][j] = a[i-1][j] + a[i][j-1];
}
}
return a[m][n];
}
本系列文章搏嗡,旨在打造LeetCode題目解題方法窿春,幫助和引導(dǎo)同學(xué)們開(kāi)闊學(xué)習(xí)算法思路,由于個(gè)人能力和精力的局限性彻况,也會(huì)參考其他網(wǎng)站的代碼和思路谁尸,如有侵權(quán),請(qǐng)聯(lián)系本人刪除纽甘。
下一題:LeetCode第63題: 不同路徑uniquePathsWithObstacles(C語(yǔ)言)