1. 程式人生 > >leetcode 62. Unique Paths

leetcode 62. Unique Paths

log etc clas 個數 vector uniq true space 條件

第一種最簡單的方法:遞歸求解:

  • 要求uniquePaths(m,n)=uniquePaths(m-1,n)+uniquePaths(m,n-1)(m>1,n>1)
  • uniquePaths(m,n)=uniquePaths(m-1,n)(,n==1)
  • uniquePaths(m,n)=uniquePaths(m,n-1)(m==1)
  • 終止條件為: m=1,n=1,uniquePaths(m,n)=1;
    int uniquePaths(int m, int n) {
      
        if(m==1&&n==1)
            return 1;
        if(m==1)
            return uniquePaths(m,n-1);
        if(n==1)
            return uniquePaths(m-1,n);
        
        if(m>1&&n>1)
        return uniquePaths(m-1,n)+uniquePaths(m,n-1);
}

  

但是遞歸方法太費時間,out

第二種方法,動態規劃的思想:

  • 建立一個動態規劃數組dp[m][n], dp[m][n]=dp[m][n-1]+dp[m-1][n-1];
        vector<vector<int>> dp(m,vector<int> (n,1));
        for(int i=1;i<m;i++)
            for(int j=1;j<n;j++)
            {
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        
        return dp[m-1][n-1];

  時間復雜度為O(n^2),cost m*nspace

第三種方法: 數學計算法:

如果有4*6 個格子,相當於有3個下,5個右,進行排列組合。得到排列的數目就ok

總共有(m+n)! / (m! * n!)種排列方法

  • m+n個數(m+n)!中排列方式
  • 除去內部相同m 個下和n個右,

leetcode 62. Unique Paths