leetcode 62不同路徑(C語言解決方案)
阿新 • • 發佈:2019-02-08
一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
問總共有多少條不同的路徑?
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?
說明:m 和 n 的值均不超過 100。
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3
輸出: 28
解題思路:將向右走一步記為1,向下走一步記為0,所有的路徑可以看做是m-1個1和n-1個0的全排列,不能有重複的,可能的結果種類當m>n時,m*(m+1)……(m+n-1)/(n-1) ! 種可能。當m小於n時,只需將上面的m和n調換,下面貼程式碼,感覺思路簡單,但是我寫的程式碼可能很爛,望諒解。
int uniquePaths(int m, int n)
{
int i,j;
long int suma=1,sumb=1;
if(m==1||n==1)
return 1;
else
{
if(m>n)
{
for (i=0;i<n-1;i++)
{
suma=m*suma;
sumb=(i+1)*sumb;
m++;
}
return suma/sumb;
}
else
{
for(i=0;i<m-1;i++)
{
suma=n*suma;
sumb=(i+1)*sumb;
n++;
}
return suma/sumb;
}
}
}