from __future__ import print_function # Time: O(m * n) # Space: O(m + n) # # Follow up for "Unique Paths": # # Now consider if some obstacles are added to the grids. How many unique paths would there be? # # An obstacle and empty space is marked as 1 and 0 respectively in the grid. # # For example, # There is one obstacle in the middle of a 3x3 grid as illustrated below. # # [ # [0,0,0], # [0,1,0], # [0,0,0] # ] # The total number of unique paths is 2. # # Note: m and n will be at most 100. # class Solution: # @param obstacleGrid, a list of lists of integers # @return an integer def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int """ m, n = len(obstacleGrid), len(obstacleGrid[0]) ways = [0]*n ways[0] = 1 for i in xrange(m): if obstacleGrid[i][0] == 1: ways[0] = 0 for j in xrange(n): if obstacleGrid[i][j] == 1: ways[j] = 0 elif j>0: ways[j] += ways[j-1] return ways[-1] if __name__ == "__main__": obstacleGrid = [ [0,0,0], [0,1,0], [0,0,0] ] print(Solution().uniquePathsWithObstacles(obstacleGrid))