[题目地址](https://leetcode.cn/problems/unique-paths-ii/description) + 递归+记忆化搜索 ```go func uniquePathsWithObstacles(obstacleGrid [][]int) int { m, n := len(obstacleGrid), len(obstacleGrid[0]) memo := make([][]int,m) for i := range obstacleGrid{ memo[i] = make([]int,n) for j := range memo[i]{ memo[i][j] = -1 } } var dfs func(int, int) int dfs = func(i, j int) int { if i < 0 || j < 0 || obstacleGrid[i][j] == 1{ return 0 } if i == 0 && j == 0{ return 1 } p := &memo[i][j] if *p == -1{ *p = dfs(i-1,j) + dfs(i,j-1) } return *p } return dfs(m-1,n-1) } ```