(cur, pos, target)
| 5 | res = [] |
| 6 | |
| 7 | def backtrack(cur, pos, target): |
| 8 | if target == 0: |
| 9 | res.append(cur.copy()) |
| 10 | return |
| 11 | if target <= 0: |
| 12 | return |
| 13 | |
| 14 | prev = -1 |
| 15 | for i in range(pos, len(candidates)): |
| 16 | if candidates[i] == prev: |
| 17 | continue |
| 18 | cur.append(candidates[i]) |
| 19 | backtrack(cur, i + 1, target - candidates[i]) |
| 20 | cur.pop() |
| 21 | prev = candidates[i] |
| 22 | |
| 23 | backtrack([], 0, target) |
| 24 | return res |