首页 > 其他 > 详细

不同路径II

时间:2021-08-08 11:11:44      阅读:32      评论:0      收藏:0      [点我收藏+]

题源:LeetCode

链接:https://leetcode-cn.com/problems/unique-paths-ii/

 

技术分享图片

 

 

其实和上一个随笔中的不同路径一样,只是多了个障碍物,多了个判断的过程。

 1 class Solution {
 2 public:
 3     int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
 4         if(obstacleGrid.size() == 0) return 0;
 5         //define dp: dp[m][n]表示在位置[m][n]时到达右下角有dp[m][n]条路径
 6         int m = obstacleGrid.size();
 7         int n = obstacleGrid[0].size();
 8         if(obstacleGrid[m - 1][n - 1] == 1) return 0;
 9         vector<vector<long long>> dp(m, vector<long long>(n, 0));
10         //base case 
11         //这道题状态转移需要从最右下角开始,是确定状态base case
12         for(int i = m - 1; i >= 0; i--){
13             if(obstacleGrid[i][n - 1] == 1)
14                 break;
15             else
16                 dp[i][n - 1] = 1;
17         }
18         for(int j = n - 1; j >= 0; j--){
19             if(obstacleGrid[m - 1][j] == 1)
20                 break;
21             else
22                 dp[m - 1][j] = 1;
23         }
24         //for循环遍历所有状态
25         for(int i = m - 2; i >=0; i--){
26             for(int j = n - 2; j >= 0; j--){
27                 if(obstacleGrid[i][j] == 1)
28                     dp[i][j] = 0;
29                 else
30                     dp[i][j] = dp[i + 1][j] + dp[i][j + 1];
31             }
32         }
33         return dp[0][0];
34 
35 
36     }
37 };

官方答案中使用到了滚动数组思想,节约了空间,后面会去学习一下用法。

 

不同路径II

原文:https://www.cnblogs.com/hosheazhang/p/15114107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!