百度2015 在线笔试题(2)
2015-09-17 09:12
309 查看
题目
障碍物问题,类似LeetCode45题Jump Game II不同的是,此处约定从左下角走至右上角,每一步只能向右、向上或斜上方前进,另外所给矩阵中元素1代表无障碍,元素0代表有障碍;
分析
动态规划,与LeetCode45题Jump Game II采用相同的处理,注意 (i , j)的取值即可!程序
#include <iostream> #include <cstdlib> #include <vector> using namespace std; //直接用非递归算法求解 class Solution { public: int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) { if (obstacleGrid.empty()) return 0; int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int> > ret(m, vector<int>(n, 0)); //矩阵最左列 for (int i = m-1; i >= 0; i--) { //无障碍,则有一条路径,否则不通 if (obstacleGrid[i][0] == 1) ret[i][0] = 1; else break; }//for //矩阵最底行 for (int j = 0; j < n; j++) { //无障碍,则有一条路径,否则不通 if (obstacleGrid[m-1][j] == 1) ret[m-1][j] = 1; else break; }//for //其余位置 for (int i = m-2; i >= 0; i--) { for (int j = 1; j < n; j++) { //当前位置为障碍,则到此处路径数为0 if (obstacleGrid[i][j] == 0) ret[i][j] = 0; else{ ret[i][j] = ret[i+1][j] + ret[i][j-1] + ret[i+1][j-1]; }//else }//for }//for return ret[0][n - 1]; }//uniques }; int main() { Solution s; vector<vector<int> > v = { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 1, 1 } }; //vector<vector<int> > v = { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } }; cout << s.uniquePathsWithObstacles(v) << endl; system("pause"); return 0; }
相关文章推荐
- 腾讯未来5年百亿投向云计算 BAT“烧钱圈地”再起
- 不到20岁时,他们如何创业成功?
- 【投稿】iOS 蓝牙开发(二)iOS 连接外设的代码实现
- S7-300/400的过程映像分区
- MySQL索引背后的数据结构及算法原理
- lintcode-用栈实现队列-40
- Deep Learning(深度学习)学习笔记整理
- 计算机器内存数量+引入和显示ARDS成员
- linux下查看内存的命令
- 点击帮助按钮改变鼠标形状
- zoj1078
- 常用批处理内部命令使用详解
- 中文分词和TF-IDF
- Linux下开机自动运行程序设置
- CocoaPods的使用
- 百度2015 在线笔试题(1)
- mysql自动备份、恢复脚本(linux的shell、windows的批处理)
- 思考与总结【7】:关于编程的胡扯
- 百度2015 在线笔试题(1)
- 分布式应用的各基本领域及开发技术概要