代码随想录 day39 | 62. 不同路径 63. 不同路径 II

62. 不同路径

题目|文章
image

思路

这道题有二叉树,动态规划和数论三种解法,在此只讨论动态规划的解法。

  1. 确定动态数组及下标含义
    这道题是m×n个位置,因此可以使用二维数组,第一个下标表示x位置,第二个下标表示y位置。
  2. 确定递推公式。
    因为只能向下和向右移动,所以每个位置的路径等于上位置和左位置的和
  3. 初始化
    dp[0][j]和dp[i][0]的路径只有一条,因此初始化为1
  4. 确定遍历顺序
    从上到下,从左到右遍历即可

实现

点击查看代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> path(m,vector<int>(n,0));
        for(int i = 0; i < m; i++) path[i][0] = 1;
        for(int j = 0; j < n; j++) path[0][j] = 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];
    }
};

复杂度分析

  • 时间复杂度:O(m×n)
  • 空间复杂度:O(m×n)

63. 不同路径 II

题目|文章
image

思路

与上一道题异曲同工。主要容易忽略点在于

  1. 初始化时,当出现障碍后,剩余位置的路径都为0;而遍历时将该位置设为0即可。
  2. 当[0][0]位置有障碍物时,直接返回0;

实现

点击查看代码
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        
        if(obstacleGrid[0][0] == 1) return 0;
        
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        vector<vector<int>> path(m, vector<int>(n, 0));
        for(int i = 0; i < m; i++) {
            if(obstacleGrid[i][0] != 1){
                path[i][0] = 1;
            }
            else break;
        }
        for(int j = 0; j < n; j++) {
            if(obstacleGrid[0][j] != 1) {
                path[0][j] = 1;
            }
            else break;
        }
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                if(obstacleGrid[i][j] != 1) {
                    path[i][j] = path[i-1][j] + path[i][j-1];
                   
                }
                 cout << path[i][j] << endl;
            }
        }
        return path[m-1][n-1];
            
    }
};

复杂度分析

  • 时间复杂度:O(m×n)
  • 空间复杂度:O(m×n)
posted @   缩地  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示