Skip to content

63.不同路径 II

题目链接:https://leetcode.cn/problems/unique-paths-ii/description/

解析:

使用动态规划,状态转移方程;

每个位置的状态取决于其上一个位置的状态,推到最底下,也就是 n-1,m-1 即是答案;

如果遇到障碍物,那么 dp[i][j]为 0; 如果是起点,为 1 其余情况,在上一个状态存在的情况下,+=上一个状态;

go
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
	dp := make([][]int, len(obstacleGrid))
	for i := range dp {
		dp[i] = make([]int, len(obstacleGrid[i])+1)
	}
	for i := range len(obstacleGrid) {
		for j := range len(obstacleGrid[i]) {
			if obstacleGrid[i][j] == 1 {
				dp[i][j] = 0 // 障碍物为 0
			} else if i == 0 && j == 0 {
				dp[i][j] = 1 // 起始点为 1
			} else {
				if i > 0 {
					dp[i][j] += dp[i-1][j]
				}
				if j > 0 {
					dp[i][j] += dp[i][j-1]
				}
			}
		}
	}
	return dp[len(obstacleGrid)-1][len(obstacleGrid[0])-1]
}
本站访客数 人次 本站总访问量