LeetCode 0090. Subsets II子集II【Python】
阿新 • • 發佈:2020-11-27
Problem
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2]
Output:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
問題
給定一個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明: 解集不能包含重複的子集。
示例:
輸入: [1,2,2]
輸出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
思路
回溯
在 LeetCode 0070 題基礎上,判斷當前元素是否和前一個元素相同,相同就剪枝。
Python3 程式碼
from typing import List class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: res = [] n = len(nums) # 先對 nums 進行排序 nums.sort() def backtrack(nums, start, path): # 加入 res res.append(path) # i 從 start 開始遞增 for i in range(start, n): # 剪枝:當前元素和前一個元素相同 if i > start and nums[i - 1] == nums[i]: continue # 回溯及更新 path # path.append([nums[i]]) backtrack(nums, i + 1, path + [nums[i]]) # path.pop() backtrack(nums, 0, []) return res