unique path iii 唯一路径 —— 滚动数组

给定一个矩阵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])

 

转载于:https://www.cnblogs.com/liqiniuniu/p/10601250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值