forked from qiyuangong/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path040_Combination_Sum_II.py
32 lines (32 loc) · 1.07 KB
/
040_Combination_Sum_II.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution(object):
def combinationSum2(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
candidates.sort()
dp = [[] for _ in range(target + 1)]
dp[0].append([])
for i in range(1, target + 1):
for j in range(len(candidates)):
if candidates[j] > i:
break
for k in range(len(dp[i - candidates[j]])):
temp = dp[i - candidates[j]][k][:]
# check if this number is used
if len(temp) > 0 and temp[-1] >= j:
continue
# store index
temp.append(j)
dp[i].append(temp)
res = []
check = {}
for temp in dp[target]:
value = [candidates[t] for t in temp]
try:
check[str(value)] += 1
except KeyError:
check[str(value)] = 1
res.append(value)
return res