# CSPT13 Build Week 4
## [Unique Paths III](https://leetcode.com/problems/unique-paths-iii/)
```
from typing import List
class Solution:
res = 0
def uniquePathsIII(self, grid: List[List[int]]) -> int:
startingPoint = self.findStartingPoint(grid)
if startingPoint == None:
return 0
self.uniquePathsHelper(grid, startingPoint[0], startingPoint[1])
return self.res
def uniquePathsHelper(self, grid: List[List[int]], x: int, y: int):
width, height = len(grid[0]), len(grid)
if x < 0 or y < 0 or x >= width or y >= height or grid[y][x] == -1:
return
if grid[y][x] == 2:
for i in range(height):
for j in range(width):
if grid[i][j] == 0:
return
self.res += 1
return
grid[y][x] = -1
self.uniquePathsHelper(grid, x + 1, y)
self.uniquePathsHelper(grid, x - 1, y)
self.uniquePathsHelper(grid, x, y + 1)
self.uniquePathsHelper(grid, x, y - 1)
grid[y][x] = 0
def findStartingPoint(self, grid: List[List[int]]):
for y in range(len(grid)):
for x in range(len(grid[0])):
if grid[y][x] == 1:
return (x, y)
return None
```