刷题62. Unique Paths

一、题目说明

题目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.

三、优化措施

其他没有看到更好的解答,递归,回溯,都比较复杂。

所有文章,坚持原创。如有转载,敬请标注出处。
原文地址:https://www.cnblogs.com/siweihz/p/12248279.html