第一次尝试
- 思路:递归
- 代码:
class Solution {
public:
int path(int curm,int curn,int m,int n){
if(curm<m&&curn<n)
return 1+path(curm+1,curn,m,n)+path(curm,curn+1,m,n);
else
return 0;
}
int uniquePaths(int m, int n) {
return 1+path(1,1,m,n);
}
};
- 超出时间限制,但是在小规模问题上结果是对的
第二次尝试
- 思路:算是动态规划?
设置一个数组,每个元素代表到达此位置的方法,可由上面和左面两个元素求和得到,将第一行和第一列元素初始化为一,依次求得最后终点的元素值 - 代码
class Solution {
public:
int uniquePaths(int m, int n) {
int arr[m][n];
for(int i=0;i<n;i++)
arr[0][i]=1;//没有直接初始化第一列
for(int i=1;i<m;++i){
arr[i][0]=1;//或许这里这样做更符合cache?
for(int j=1;j<n;j++)
arr[i][j]=arr[i-1][j]+arr[i][j-1];
}
return arr[m-1][n-1];
}
};
开心!
好吧,看了评论,还是我太菜了。