目录
题目
思路
Code
题目
园区某部门举办了Family Day,邀请员工及其家属参加;将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径
编辑
输入描述
第一行为园区的长和宽:
后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观
输出描述
输出为不同的路径数量
示例1:
输入:
3 3
0 0 00 1 0
0 0 0
输出:2
思路
1:leetcode原题: LeetCode 63 - 不同路径 II (Python3|Go) Unique Paths II - 知乎
2:设 dp[i][j] 表示从 (0, 0) 到 (i - 1, j - 1) 的不同路径数。
这里 i 和 j 都比对应格子的下标大 1 ,是为了方便处理第一行和第一列的情况,避免越界判断。
初始状态:dp[i][j] = 0; dp[0][1] = 1 。
注意,这里也可以令 dp[1][0] = 1 ,但两者不能同时为 1 。
这样初始化也是为了方便后续处理,并能转移出 dp[1][1] = 1 。
状态转移方程:
- obstacleGrid[i - 1][j - 1] == 0: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] ,即可以从上边或左边的格子走过来
- obstacleGrid[i - 1][j - 1] == 1: dp[i][j] = 0 ,实际上不用处理,因为初始化时就是 0
最后, dp[m][n] 就是从 (0, 0) 到 (m - 1, n - 1) 的不同路径数。
时间复杂度:O(mn)
- 需要遍历 dp 全部 O(mn) 个状态
空间复杂度:O(mn)
- 需要维护一个大小为 O(mn) 的数组 dp