第一思路是动态规划
通过观察,每一个格子的路线数等于相邻的左方格子的路线数加上上方格子的路线数
于是我们就得到 dp[i][j] = dp[i-1][j] + dp[i][j-1] 这个状态转移方程
1 int get_sum(vector<vector<int>> dp, int i, int j, int m, int n) 2 { 3 if(j == 1 || i == 1) 4 return 1; 5 return dp[i-1][j] + dp[i][j-1]; 6 } 7 int uniquePaths(int m, int n) 8 { 9 vector<vector<int>> dp(m+1,vector<int>(n+1,0)); 10 dp[1][1] = -1; 11 for(int i=1; i<=m; i++) 12 { 13 for(int j=1; j<=n; j++) 14 { 15 dp[i][j] = get_sum(dp, i, j, m, n); 16 } 17 } 18 return dp[m][n]; 19 }
1 class Solution { 2 public: 3 int uniquePaths(int m, int n) { 4 vector<vector<int>> dp(m,vector<int>(n,0)); 5 for(int i=0;i<m;i++) 6 dp[i][0] = 1; 7 for(int j=0;j<n;j++) 8 dp[0][j] = 1; 9 for(int i=1; i<m; i++) 10 { 11 for(int j=1; j<n; j++) 12 { 13 dp[i][j] = dp[i-1][j] + dp[i][j-1]; 14 } 15 } 16 return dp[m-1][n-1]; 17 } 18 };
原文:https://www.cnblogs.com/tornado549/p/10611092.html