classSolution: defsubsets(self, nums: List[int]) -> List[List[int]]: n = len(nums) ans = [] for i inrange(1 << n): # 枚舉所有子集,狀態壓縮 cur = [] # 當前子集 for j inrange(n): if i & (1 << j): # nums[j] 在當前子集中 cur.append(nums[j]) ans.append(cur) return ans
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution { public: vector<vector<int>> subsets(vector<int>& nums) { int n = nums.size(); vector<vector<int>> ans; for (int i = 0; i < (1 << n); i++) { // 枚舉所有子集,狀態壓縮 vector<int> cur; // 當前子集 for (int j = 0; j < n; j++){ // 檢查 nums[j] 是否在當前子集中 if (i & (1 << j)) cur.push_back(nums[j]); } ans.push_back(cur); } return ans; } };
classSolution: defsubsets(self, nums: List[int]) -> List[List[int]]: ans = [[]] # 初始化答案,只包含一個空集合 for x in nums: # 枚舉所有元素 ans += [cur + [x] for cur in ans] # 複製一份當前的所有子集,並在其中添加當前元素 x return ans
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> ans = {{}}; // 初始化答案,只包含一個空集合 for (int x : nums) { // 枚舉所有元素 int k = ans.size(); for (int j = 0; j < k; j++) { // 複製一份當前的所有子集,並在其中添加當前元素 x vector<int> cur = ans[j]; cur.push_back(x); ans.push_back(cur); } } return ans; } };
寫在最後
Cover photo is generated by @ゴリラの素材屋さん, thanks for their work!