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

算法训练Day39|62.不同路径 ● 63. 不同路径 II

LeetCode:62.不同路径

62. 不同路径 - 力扣(LeetCode)

1.思路

想象成矩阵填格子,两个关键点,初始化和递推公式。
初始化除点(0,0)第一行第一列均为1,递推公式推导dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

2.代码实现

 1class Solution {2    public int uniquePaths(int m, int n) {3        // 二维数组4        int[][] dp = new int[m][n];56        // dp[m][n]:到达m,n位置,有dp[m][n]种路径7        // 初始化8        for (int i = 0; i < m; i++) {9            dp[i][0] = 1;
10        }
11        for (int i = 0; i < n; i++) {
12            dp[0][i] = 1;
13        }
14        for (int i = 1; i < m; i++) {
15            for (int j = 1; j < n; j++) {
16                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
17            }
18        }
19        return dp[m - 1][n - 1];
20    }
21}
22

3.复杂度分析

时间复杂度:O(m * n).
空间复杂度:O(m * n).

LeetCode:63. 不同路径 II 

63. 不同路径 II - 力扣(LeetCode)

1.思路

确定dp[][]数组,
条件排除,各种情况的考虑很关键,首尾节点和首行首列会影响初始化,当前节点影响dp[i][j]的值,

2.代码实现

 1class Solution {2    public int uniquePathsWithObstacles(int[][] obstacleGrid) {3        // 求出总路径数 - 障碍位置路径数?45        int m = obstacleGrid.length; // 获取行数6        int n = obstacleGrid[0].length; // 获取列数7        // dp[m][n] 表示节点(m,n)处潜在路径数8        int[][] dp = new int[m][n];9        // 当起始节点和终止节点均有障碍时,无结果,直接返回0
10        if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) {
11            return 0;
12        }
13        // 每行的首位数字初始化(也即首列初始化),遇到障碍设置为0
14        for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) {
15            dp[i][0] = 1;
16        }
17        // 每列的首位数字初始化(也即首行初始化),遇到障碍设置为0
18        for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) {
19            dp[0][j] = 1;
20        }
21        // 遍历输出dp[][]数组值
22        for (int i = 1; i < m; i++) {
23            for (int j = 1; j < n; j++) [
24                if (obstacleGrid[i][j] == 0) { // 当前节点没有障碍时,正常执行
25                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
26                } else {
27                    dp[i][j] = 0; // 有障碍时直接赋值为0
28                }
29            ]
30        }
31        // 数组下标从0 开始,m - 1, n - 1也就代表(m,n)位置
32        return dp[m - 1][n - 1];
33
34    }
35}
36

3.复杂度分析

时间复杂度:O(m * n).
空间复杂度:O(m * n).

http://www.lryc.cn/news/109941.html

相关文章:

  • react中hooks分享
  • LeetCode1207. 独一无二的出现次数
  • 【maven】构建项目前clean和不clean的区别
  • Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer
  • 从零开始理解Linux中断架构(24)软中断核心函数__do_softirq
  • 【云原生】Kubernetes中deployment是什么?
  • sk_buff操作函数学习
  • conda create时候出现JSONDecoderError解决方法
  • Electron 工具进程utilityProcess 使用中遇到的坑点汇集
  • JdbcTemplate
  • PROFINET转TCP/IP网关profinet网线接头接法
  • 【FPGA IP系列】FIFO的通俗理解
  • Kylin v10基于cephadm工具离线部署ceph分布式存储
  • 框架的前置学习-反射
  • 【使用bat脚本实现批量创建文件夹、批量复制文件至对应文件夹中】
  • 面向视频会议场景的 H.266/VVC 码率控制算法研究
  • 【网络基础实战之路】设计网络划分的实战详解
  • MacBook触控板窗口管理 Swish for Mac
  • VS开发Qt程序,无法打印QDebug调试信息,VS进行Qt开发时Qt Designer无法使用“转到槽”选项
  • MySQL操作命令详解:增删改查
  • MySQL字段类型与存储空间的关系
  • 红船元宇宙 上海布袋除尘器后一家太平洋百货月底停业
  • vue 图片回显标签
  • 《向量数据库指南》——使用SQuAD 数据集演示Faiss 功能
  • java多线程并发面试题总结(史上最全40道)
  • IDEA强大的VisualGC插件
  • 桐乡上元教育室内设计培训班-CAD学习
  • h5浏览pdf文件
  • 无涯教程-Lua - 嵌套if语句函数
  • vue v-slot指令