【问题描述】[中等]

【解答思路】

1. 动态规划流程

第 1 步:设计状态

第 2 步:状态转移方程

第 3 步:考虑初始化
第一行第一列 没有遇到“障碍” 就为1 如果u(i,j)==0 直接返回 0
第 4 步:考虑输出
右下角: f(i, j)
时间复杂度:O(N^2) 空间复杂度:O(N^2)

public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row = obstacleGrid.length;int col = obstacleGrid[0].length;int[][] grid = new int[row][col];if(obstacleGrid[0][0]==1){return 0;}for(int i = 0;i<row;i++){if( obstacleGrid[i][0]==1){break;}grid[i][0] = 1; }for(int j = 0 ;j<col;j++){if( obstacleGrid[0][j] ==1){break;}grid[0][j] =1;}for(int i = 1;i<row;i++){for(int j = 1 ;j<col;j++){if(obstacleGrid[i][j] ==0){grid[i][j] =grid[i-1][j]+grid[i][j-1];}}}return grid[row-1][col-1];}
2. 动态规划状态压缩


时间复杂度:O(NM) 空间复杂度:O(M)

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int n = obstacleGrid.length, m = obstacleGrid[0].length;int[] f = new int[m];f[0] = obstacleGrid[0][0] == 0 ? 1 : 0;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (obstacleGrid[i][j] == 1) {f[j] = 0;continue;}if (j - 1 >= 0 && obstacleGrid[i][j - 1] == 0) {f[j] += f[j - 1];}}}return f[m - 1];}
}

【总结】

1.动态规划流程

第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩

2.动态规划特点

3. 滚动数组思想压缩

用一维数组暂且保存上一次遍历的结果 ,时刻更新 ,降低二维数组到一维数组

参考链接:https://leetcode-cn.com/problems/unique-paths-ii/solution/bu-tong-lu-jing-ii-by-leetcode-solution-2/

[Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]相关推荐

  1. [Leetcode][第337题][JAVA][打家劫舍3][递归][动态规划]

    [问题描述][中等] [解答思路] 1. 动态规划 第 1 步:状态定义 dp[node][j] :这里 node 表示一个结点,以 node 为根结点的树,并且规定了 node 是否偷取能够获得的最 ...

  2. [Leetcode][第174题][JAVA][地下城游戏][DFS][动态规划]

    [问题描述][中等] [解答思路] 1. 回溯(暴力)& 优化 超时,需要优化 public int calculateMinimumHP(int[][] dungeon) {if (dung ...

  3. [Leetcode][第647题][JAVA][回文子串][动态规划][中心扩展][Manacher 算法]

    [问题描述][中等] [解答思路] 1. 暴力 首先明确如何判断一个字符串是否为回文字符串.第一个字符与最后一个字符相同,第二个字符与倒数第二个字符相同-关于中心位置轴对称. 本题要求一共有多少个回文 ...

  4. [Leetcode][第97题][JAVA][交错字符串][BFS][动态规划]

    [问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 f(i,j) 表示 s 1的前 i个元素和 s2 的前 j个元素是否能交错组成 s3的前 i + j 个元素 第 2 步:状态 ...

  5. [Leetcode][第44题][JAVA][通配符匹配][贪心][动态规划]

    [问题描述][困难] [解答思路] 1. 动态规划 第 1 步:设计状态 dp[i][j]dp[i][j] 表示字符串 ss 的前 ii 个字符和模式 pp 的前 jj 个字符是否能匹配 第 2 步: ...

  6. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  7. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  8. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

  9. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

最新文章

  1. 浅谈电子政务门户建设选型经验
  2. 趣学python3(26)-pygame-蛇身运动
  3. Git 的安装及配置
  4. Microsoft MVC3 框架
  5. python房价数据挖掘_Python数据分析及可视化实例之帝都房价预测
  6. 系统学习NLP(二十九)--BERT
  7. 基于SSM的大学生兼职平台
  8. 【概率论与数理统计】目录
  9. 如何解决mysql执行语句效率低下不走索引
  10. 安卓通过经纬度,实现intent调用百度,高德,Google地图客户端实现驾车导航功能
  11. Java 线程池配置的常见误区
  12. C语言的数据类型大全,整型数据在内存中的存储方式
  13. TOEFL wordlist 9
  14. mac 卸载php版本,mac osx 更改自带php版本
  15. nyoj 1275 导弹发射(河南省2016年省赛)
  16. MVC4 AspNet MVC下的Ajax / 使用JQuery做相关的Ajax请求
  17. c语言写txt文件fwrite,文件操作 fwrite,该怎么处理
  18. GPU与CPU性能比较
  19. 选型帮推荐:上海音锋机器人【托盘四向车】
  20. Linux Shell程序设计(2)

热门文章

  1. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加...
  2. JQuery技巧(转)
  3. 单片机c语言应用100例第3版课后答案,单片机C语言应用100例(第3版)(含光盘1张)...
  4. android studio 导入依赖报错——Could not find com.xxx,(# fields: 66338 > 65536)
  5. java控制台输出百分比进度条示例
  6. c语言常考的程序,复试C语言常考趣味程序方案.doc
  7. java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作
  8. java solr_通过Java访问Solr服务实例及相关配置
  9. java 递归20210408-3
  10. 使用php创建一个注册表单,如何实现一个简单的注册表单