1. 程式人生 > >leetcode 62不同路徑(C語言解決方案)

leetcode 62不同路徑(C語言解決方案)

一個機器人位於一個 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; } } }