1. 程式人生 > >unique path iii 唯一路徑 —— 滾動數組

unique path iii 唯一路徑 —— 滾動數組

add grid @param 滾動數組 不同的 pan union 每一個 所有

給定一個矩陣matrix,從左上角走到右下角。

每一個格子都包含了一個值,所以每條路徑都有一個值,找到所有值不同的路徑和。

dp[i][j]表示從(i,j)走到右下角所有情況的“路徑和”,用集合來表示。

遞推公式:dp[i][j] = set ( [ (obj + matrix[i][j] ) for obj in union( dp[i][j+1], dp[i+1][j] ) ] )

 1 class Solution:
 2     """
 3     @param: : an array of arrays
 4     @return: the sum of all unique weighted paths
5 """ 6 7 def uniqueWeightedPaths(self, grid): 8 # write your codes here 9 if not grid or not grid[0]: 10 return 0 11 12 dp = [set() for i in range(len(grid[0]))] 13 dp[len(grid[0]) - 1].add(0) 14 15 for row in
range(len(grid) - 1, -1, -1): 16 for col in range(len(grid[0]) - 1, -1, -1): 17 if col + 1 < len(grid[0]): 18 dp[col] = dp[col].union(dp[col + 1]) 19 dp[col] = set([(obj + grid[row][col]) for obj in dp[col]]) 20 21
return sum(dp[0])

unique path iii 唯一路徑 —— 滾動數組