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?
题目:从左上角到右下角总共有几种走法?只能向左或者下走。
思路:动态规划,转台转移方程为
path[i][j] = path[i-1][j] + path[i][j-1]; path[i][0] = 1; path[0][i] = 1;
int uniquePaths(int m, int n) {
/*int** path =(int**)malloc(sizeof(int*) * m);
for(int i=0;i<m;i++)
path[i] = (int*)malloc(sizeof(int)*n);
for(int i=0;i<m;i++)
path[i][0] = 1;
for(int i=0;i<n;i++)
path[0][i] = 1;
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
path[i][j] = path[i-1][j] + path[i][j-1];
int r = path[m-1][n-1];
for(int i=0;i<m;i++)
free(path[i]);
free(path);
return r;*/
}
方案二:同样原理只是O(space)= n
int uniquePaths(int m, int n) {
int *r = (int*)malloc(sizeof(int)*n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(0==j || 0 == i)
r[j] = 1;
else
r[j] = r[j] + r[j-1];
}
int r1 = r[n-1];
free(r);
return r1;
}