Unique Paths
来源:互联网 发布:dt数据时代 编辑:程序博客网 时间:2024/06/06 19:14
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?
题目的意思是从Start到Finish,每次只能向下或右,有多少可能
自己最开始的想法:深度优先遍历即可(超时了)
void FindPort(int m,int n,int row,int col,int &count){ if (row == m &&col == n) { count++; } else if (row <= m&&col <= n) { for (int i = 0; i < 2; i++) { if (i == 0) //向右 { col++; FindPort(m, n, row, col, count); col--; } else if (i==1)//向下 { row++; FindPort(m, n, row, col, count); row--; } } }}int uniquePaths(int m, int n){ int count = 0; FindPort(m, n, 1, 1, count); return count;}
解法:DP 很简单
int uniquePaths(int m, int n){ vector<vector<int> > path(m, vector<int> (n, 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];//上一个位置可能是左边,也可能是右边 return path[m - 1][n - 1];}
Follow up for “Unique Paths”:
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
在第一题中加了一个障碍物,有障碍物的不能到达
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid){ int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int> > path(m, vector<int>(n, 0)); for (int k = 0; k < n; k++) { if (obstacleGrid[0][k] == 0) path[0][k] = 1; else break; //若出现障碍物,则第一行的后面几列无法到达 } for (int h = 0; h < m; h++) { if (obstacleGrid[h][0] == 0) path[h][0] = 1; else break;//若出现障碍物,则第一列的后面几行无法到达 } if (obstacleGrid[m - 1][n - 1] == 1) return 0; for (int i = 1; i < m; i++) for (int j = 1; j < n; j++) { if (obstacleGrid[i - 1][j] == 0 && obstacleGrid[i][j - 1] == 0) path[i][j] = path[i - 1][j] + path[i][j - 1]; else if (obstacleGrid[i - 1][j] == 0) path[i][j] = path[i - 1][j]; else if (obstacleGrid[i][j - 1] == 0) path[i][j] = path[i][j - 1]; } return path[m - 1][n - 1];}
阅读全文
0 0
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Unique Paths
- Android 判断当前语言环境是否是中文环境
- java之String
- 前端涉及的所有知识体系(好东西呀!)
- 笔记1
- 出现Could not publish to the server. java.lang.NullPointerException报错信息
- Unique Paths
- c#的访问修饰符
- install anaconda
- remote: error: insufficient permission for adding an object to repository database
- Macaca之填坑中所参考的一些文章
- influxdb {"error":"partial write: max-values-per-tag limit exceeded (100009/100000)
- 山东大学软件测试技术实验三报告
- 关于ntp配置
- Spring Boot 初探之JSP