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 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]; } };
相关文章推荐
- request、response 中文乱码问题
- UITableView(表示图)
- java Integer.valueOf()方法
- UIGraphicsBeginImageContext系列知识
- 开源视频会议BigBlueButton 0.81二次开发API
- POJ 1904 King's Quest 强连通分量+二分匹配
- EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题
- iOS App开发中UIViewController类的使用教程
- SequenceInputStream
- WebUI 常用
- 不自定义cell,最原始的创建UITableViewCell
- 正确使用String,StringBuffer,StringBuilder
- android 事件处理机制之requestDisallowInterceptTouchEvent
- C#时间转换UInt64<--->DateTime
- Vue.js
- 设计模式(2)-创建型-建造者模式(Builder)
- 设计模式(2)-创建型-建造者模式(Builder)
- 设计模式(2)-创建型-建造者模式(Builder)
- 设计模式(2)-创建型-建造者模式(Builder)
- druid数据源的加密解密工具