【刷题】牛客网——求路径(机器人到达地图终点求路径总数)、求路径II(加入障碍求路径总数)

  • Post author:
  • Post category:其他


题目描述:


经典必刷编程题库——求路径(机器人到达地图终点求路径总数)


一个机器人在m×n大小的地图的左上角(起点)。 机器人每次向下或向右移动。机器人要到达地图的右下角(终点)。

可以有多少种不同的路径从起点走到终点?

(备注:m和n小于等于100,并保证计算结果在int范围内)

在这里插入图片描述

class Solution
{
public:
    int uniquePaths(int m, int n)
    {
        int ans[m][n];
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(i == 0 || j == 0)
                    ans[i][j] = 1;
                else
                {
                    ans[i][j] = ans[i-1][j] + ans[i][j-1];
                }
            }
        }
        return ans[m-1][n-1];
    }
};

题目描述:


经典必刷编程题库——求路径II(加入障碍求路径总数)

继续求路径。

如果在图中加入了一些障碍,有多少不同的路径?

分别用0和1代表空区域和障碍。

在这里插入图片描述

class Solution
{
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid)
    {
        if(obstacleGrid.size() == 0 || obstacleGrid[0][0] == 1)
            return 0;
        int row = obstacleGrid.size();
        int col = obstacleGrid[0].size();
        vector<vector<int>> ans(row, vector<int>(col, 0));
        for(int i = 0; i < row; i++)
        {
            if(obstacleGrid[i][0] == 0)
                ans[i][0] = 1;
            else
                break;
        }
        for(int j = 0; j < col; j++)
        {
            if(obstacleGrid[0][j] == 0)
                ans[0][j] = 1;
            else
                break;
        }
        
        for(int i = 1; i < row; i++)
        {
            for(int j = 1; j < col; j++)
            {
                if(obstacleGrid[i][j] == 0)
                    ans[i][j] = ans[i - 1][j] + ans[i][j - 1];
            }
        }
        return ans[row - 1][col - 1];
    }
};



版权声明:本文为m0_46613023原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。