当前位置: 首页 > news >正文

昆明网站制作的方法横泉水库建设管理局网站

昆明网站制作的方法,横泉水库建设管理局网站,坪山城市建设局官方网站,本机建设网站算法-DFS记忆化/动态规划-不同路径 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/unique-paths-ii 1.2 题目描述 2 DFS记忆化 2.1 思路 注意题意,每次要么往右,要么往下走,也就是说不能走回头路。但是仍有可能走到之前已经…

算法-DFS+记忆化/动态规划-不同路径 II

1 题目概述

1.1 题目出处

https://leetcode.cn/problems/unique-paths-ii

1.2 题目描述

在这里插入图片描述
在这里插入图片描述

2 DFS+记忆化

2.1 思路

注意题意,每次要么往右,要么往下走,也就是说不能走回头路。但是仍有可能走到之前已经访问过的节点。题意是要求走到终点的路径数,假设往右可以走通,往下也可以走通,那么当前格子的走通方法数 = 往右走通方法数 + 往下走通方法数。

2.2 代码

class Solution {int m = 0;int n = 0;int[][] paths = null;public int uniquePathsWithObstacles(int[][] obstacleGrid) {m = obstacleGrid.length;n = obstacleGrid[0].length;paths = new int[m][n];return dfs(obstacleGrid, 0, 0);}   private int dfs(int[][] obstacleGrid, int i, int j) {if (paths[i][j] > 0) {return paths[i][j];}if (obstacleGrid[i][j] == 1) {return 0;}if (i == m - 1 && j == n - 1) {paths[i][j] = 1;return 1;}int result = 0;if (i < m - 1) {result += dfs(obstacleGrid, i + 1, j);}if (j < n - 1) {result += dfs(obstacleGrid, i, j + 1);}paths[i][j] = result;return result;}
}

2.3 时间复杂度

O(m*n)
在这里插入图片描述

2.4 空间复杂度

O(m*n)

3 二维动态规划

3.1 思路

从上述DFS中思考,可以推出动态规划表达式:dp[i][j] = dp[i+1][j] + dp[i][j+1]。

这里注意两点:

  • dp[m-1][n-1] 的值,需要看obstacleGrid[m-1][n-1]是否为1,如果为1代表是障碍,则直接就返回0了。否则就填为1.
  • 从动态规划表达式可知,需要i和j都从大到小遍历才可计算。

3.2 代码

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

3.3 时间复杂度

在这里插入图片描述

O(M*N)

3.4 空间复杂度

O(M*N)

4 一维动态规划

4.1 思路

尝试压缩为一维动态规划。

  1. 考虑dp[i][j] = dp[i+1][j] + dp[i][j+1],那么如果我们每次固定i值,从最后一行的j从大到小递减计算,就能计算出最后一行的各个dp[j]值。
  2. 然后i-1到上一行,此时,dp[j]依然表示此行每个位置的通终点方法数,相当于是已经从当前位置累加了往下走的路线的方法数,即dp[i][j] = dp[i+1][j] + dp[i][j+1]中的 dp[i+1][j],那么我们只需要再计算本行的dp[i][j+1]即可。
  3. 综上所述,我们可以压缩二维动态规划为一维动态规划:dp[j] += dp[j+1]

4.2 代码

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

4.3 时间复杂度

在这里插入图片描述

3.4 空间复杂度

O(N)

http://www.yayakq.cn/news/866904/

相关文章:

  • 网站建设合同用交印花税做盗版电影网站后果
  • 百度网站免费优化软件下载图书馆网站建设方案设计论文
  • 做网站 套模板 后端台州本地做网站的
  • 网站制作模版资讯网站 怎样 增强用户粘度
  • 做seo网站优化价格天津建设工程信息网如何投标报名
  • 论述电子商务网站建设的流程上海品牌全案设计公司
  • 西安网站建设麦欧科技网页设计字体颜色代码
  • 营销型企业网站建设应遵守的原则手机网站带后台源代码
  • 网站建设费记到什么科目北京建设工程交易信息网官网
  • 鹿泉市建设局网站大型网站团队人数
  • 填写网站信息门户网站解决方案
  • 网站制作 服务如何制作一个自己的网站?
  • 网站建设运营合作合同安徽设计公司排名
  • 网站建设流程代理商招投标网站
  • 部门网站建设目的青岛网上房地产官网
  • 西安医院网站建设网站推广实施计划
  • 网站建设纟金手指下拉壹陆wordpress循环分类
  • 做网站个人怎么签合同小榄网站设计
  • 广西网站建设流程全景网站模版
  • 沈阳网站推广有什么技巧网络公司名字大全集
  • 怎样做一个好的网站网站备案号怎么查
  • 淘宝联盟建网站怎么做捕鱼网站
  • 传诚信网站建设口碑好的广州做网站
  • 免费ppt模板下载大全网站中牟网络推广
  • 网站建设亿金手指花总14自己做的网站做登录
  • 易思腾网站建设售房网站模板
  • 自助网站建设方案请被人做网站
  • 黄圃网站建设小语种网站建设公司
  • 网站投放广告费用东莞建设网办事指南
  • 中文网站开发工具专门做旅游的网站有哪些