一、题目说明
题目62. Unique Paths,在一个m*n矩阵中,求从左上角Start到右下角Finish所有路径。其中每次只能向下、向右移动。难度是Medium!
二、我的解答
这个题目读读题目,理解后不难。定义一个dp[m][n]
,初始化最后一列为1,最后一行为1,然后循环计算到dp[0][0]
就可以了。
代码如下:
class Solution{
public:
int uniquePaths(int m,int n){
vector<vector<int>> dp(m,vector<int>(n,0));
//最后一行初始化为1
for(int i=0;i<n;i++){
dp[m-1][i] = 1;
}
//最后一列初始化为1
for(int i=0;i<m;i++){
dp[i][n-1] = 1;
}
for(int t=n-2;t>=0;t--){
for(int k=m-2;k>=0;k--){
dp[k][t] = dp[k+1][t]+dp[k][t+1];
}
}
return dp[0][0];
}
};
性能如下:
Runtime: 4 ms, faster than 56.78% of C++ online submissions for Unique Paths.
Memory Usage: 8.8 MB, less than 32.81% of C++ online submissions for Unique Paths.
三、优化措施
其他没有看到更好的解答,递归,回溯,都比较复杂。