做网站前需要准备什么软件,wordpress插件xiazai,dw做链接网站无法显示该页面,wordpress uazoh7Leetcode63——不同路径Ⅱ
题目描述#xff1a;
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角#xff08;即 grid[0][0]#xff09;。机器人尝试移动到 右下角#xff08;即 grid[m - 1][n - 1]#xff09;。机器人每次只能向下或者向右移动一步。
网格…Leetcode63——不同路径Ⅱ
题目描述
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角即 grid[0][0]。机器人尝试移动到 右下角即 grid[m - 1][n - 1]。机器人每次只能向下或者向右移动一步。
网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。
返回机器人能够到达右下角的不同路径数量。
测试用例保证答案小于等于 2 * 109。 示例 1 输入obstacleGrid [[0,0,0],[0,1,0],[0,0,0]]
输出2
解释3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径
1. 向右 - 向右 - 向下 - 向下
2. 向下 - 向下 - 向右 - 向右
算法思想
利用动态规划的思想通过bp[][]二位数组记录每到位置(m,n)时有多少种走法。 算法实现
int uniquePathsWithObstacles(vectorvectorint obstacleGrid) {//起点有障碍直接返回0if (obstacleGrid[0][0] 1)return 0;/*bp[m][n]表示到位置m,n有多少种不同的路径*/vectorvectorint bp(obstacleGrid.size(),vectorint(obstacleGrid[0].size(), 1));//bp数组第一行的初始化for (int i 0; i obstacleGrid[0].size(); i) {if (obstacleGrid[0][i] 1) {while (i obstacleGrid[0].size()) {bp[0][i] 0;}}}//bp数组的第一列初始化for (int i 0; i obstacleGrid.size(); i) {if (obstacleGrid[i][0] 1) {while (i obstacleGrid.size()) {bp[i][0] 0;}}}//bp数组的计算for (int i 1; i obstacleGrid.size(); i) {for (int j 1; j obstacleGrid[0].size(); j) {if (obstacleGrid[i][j] 1)bp[i][j] 0;elsebp[i][j] bp[i - 1][j] bp[i][j - 1];}}//终点位置及所求返回return bp[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1];}