动态规划
int uniquePaths(int m, int n) {
vector<vector<int>> dp(n,vector<int>(m));
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(i==0) dp[0][j]=1;
else if(j==0) dp[i][0]=1;
else dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[n-1][m-1];
}
很简单的就可以简化为2行。
但是不能简化为1行,因为只有1行时,要从右向左更新dp表,但是,此题的公式又需要左边的值先更新
int uniquePaths(int m, int n) {
vector<vector<int>> dp(2,vector<int>(m));
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(i==0) dp[0][j]=1;
else if(j==0) dp[i%2][0]=1;
else dp[i%2][j]=dp[(i-1)%2][j]+dp[i%2][j-1];
}
}
return dp[(n-1)%2][m-1];
}