您的位置:首页 > 产品设计 > UI/UE

Unique Paths

2016-07-13 10:04 337 查看
最开始用DFS递归,超时(m,n剪枝):

class Solutio
4000
n {
public:
int res = 0;
int uniquePaths(int m, int n) {
find(1, 1, m, n);
return res;
}

void find(int r, int d, int &m, int &n)
{
if (r == m && d == n)
{
res++;
return;
}
if (r < m)
{
find(r + 1, d, m, n);
}
if(d<n)
{
find(r, d + 1, m, n);
}

}
};

用递归计算阶乘,中间计算结果超过int,返回0导致0被除以。顺便复习了一下函数表达式的写法。

class Solution {
public:
int uniquePaths(int m, int n) {
std::function<int(int)> fac = [&fac](int a) ->int { return a <= 0 ? 1 : fac(a - 1)*a; };
return fac(n - 2) / fac(m - 1) / fac(n - m - 1);
}
};
正确方法是用动态规划:(最近的几道题都是动态规划啊)

二维数组方法:

class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> v(m, vector<int>(n, 1));
for(int i=1; i<m; ++i){
for(int j=1; j<n; ++j){
v[i][j]=v[i-1][j]+v[i][j-1];
}
}
return v[m-1][n-1];
}
};


一维数组方法:

class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> v(n, 1);
for(int i=1; i<m; ++i){
for(int j=1; j<n; ++j){
v[j]+=v[j-1];
}
}
return v[n-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: