[LeetCode]Unique Paths
Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique paths are there?
Above is a 3 x 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
一个递推公式f(m,n)=f(m-1,n)+f(m,n-1)。
因为假设往下走一步,就和(m-1,n)一样了,就是f(m-1,n)。
假设往下右一步,就和(m,n-1)一样了,就是f(m,n-1)。
还有就是f(m,1)=1 f(1,n)=1,因为所有一行或者一列都只有一种走法。
递归方法两行搞定,但是里面会有很多的重复计算耗时很多,mn一旦很大,重复计算耗时就会特别大。
正确做法是从(2,2)开始计算,每个只计算一次。
1 class Solution { 2 public: 3 int uniquePaths(int m, int n) { 4 vector<vector<int>> f(m+1,vector<int>(n+1,0)); 5 for(int i=1;i<=n;i++) f[1][i]=1; 6 for(int i=1;i<=m;i++) f[i][1]=1; 7 for(int i=2;i<=m;i++) 8 { 9 for(int j=2;j<=n;j++) 10 { 11 f[i][j]=f[i-1][j]+f[i][j-1]; 12 } 13 } 14 return f[m][n]; 15 } 16 };
注意这儿的二维vector的初始化为0。
1 vector<vector<int>> f(m+1,vector<int>(n+1,0));