精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你知道嗎?子集問題也要去重了!

開發 前端
如果把 子集問題、組合問題、分割問題都抽象為一棵樹的話,那么組合問題和分割問題都是收集樹的葉子節點,而子集問題是找樹的所有節點!

[[427534]]

子集問題+去重

子集II

力扣題目鏈接:https://leetcode-cn.com/problems/subsets-ii/

給定一個可能包含重復元素的整數數組 nums,返回該數組所有可能的子集(冪集)。

說明:解集不能包含重復的子集。

示例:

  • 輸入: [1,2,2]
  • 輸出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]

思路

做本題之前一定要先做78.子集。

這道題目和78.子集區別就是集合里有重復元素了,而且求取的子集要去重。

那么關于回溯算法中的去重問題,在40.組合總和II中已經詳細講解過了,和本題是一個套路。

劇透一下,后期要講解的排列問題里去重也是這個套路,所以理解“樹層去重”和“樹枝去重”非常重要。

用示例中的[1, 2, 2] 來舉例,如圖所示:(注意去重需要先對集合排序)

子集II

從圖中可以看出,同一樹層上重復取2 就要過濾掉,同一樹枝上就可以重復取2,因為同一樹枝上元素的集合才是唯一子集!

本題就是其實就是78.子集的基礎上加上了去重,去重我們在40.組合總和II也講過了,所以我就直接給出代碼了:

C++代碼如下:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; 
  4.     vector<int> path; 
  5.     void backtracking(vector<int>& nums, int startIndex, vector<bool>& used) { 
  6.         result.push_back(path); 
  7.         for (int i = startIndex; i < nums.size(); i++) { 
  8.             // used[i - 1] == true,說明同一樹支candidates[i - 1]使用過 
  9.             // used[i - 1] == false,說明同一樹層candidates[i - 1]使用過 
  10.             // 而我們要對同一樹層使用過的元素進行跳過 
  11.             if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) { 
  12.                 continue
  13.             } 
  14.             path.push_back(nums[i]); 
  15.             used[i] = true
  16.             backtracking(nums, i + 1, used); 
  17.             used[i] = false
  18.             path.pop_back(); 
  19.         } 
  20.     } 
  21.  
  22. public
  23.     vector<vector<int>> subsetsWithDup(vector<int>& nums) { 
  24.         result.clear(); 
  25.         path.clear(); 
  26.         vector<bool> used(nums.size(), false); 
  27.         sort(nums.begin(), nums.end()); // 去重需要排序 
  28.         backtracking(nums, 0, used); 
  29.         return result; 
  30.     } 
  31. }; 

使用set去重的版本。

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; 
  4.     vector<int> path; 
  5.     void backtracking(vector<int>& nums, int startIndex, vector<bool>& used) { 
  6.         result.push_back(path); 
  7.         unordered_set<int> uset; 
  8.         for (int i = startIndex; i < nums.size(); i++) { 
  9.             if (uset.find(nums[i]) != uset.end()) { 
  10.                 continue
  11.             } 
  12.             uset.insert(nums[i]); 
  13.             path.push_back(nums[i]); 
  14.             backtracking(nums, i + 1, used); 
  15.             path.pop_back(); 
  16.         } 
  17.     } 
  18.  
  19. public
  20.     vector<vector<int>> subsetsWithDup(vector<int>& nums) { 
  21.         result.clear(); 
  22.         path.clear(); 
  23.         vector<bool> used(nums.size(), false); 
  24.         sort(nums.begin(), nums.end()); // 去重需要排序 
  25.         backtracking(nums, 0, used); 
  26.         return result; 
  27.     } 
  28. }; 

補充

本題也可以不適用used數組來去重,因為遞歸的時候下一個startIndex是i+1而不是0。

如果要是全排列的話,每次要從0開始遍歷,為了跳過已入棧的元素,需要使用used。

代碼如下:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; 
  4.     vector<int> path; 
  5.     void backtracking(vector<int>& nums, int startIndex) { 
  6.         result.push_back(path); 
  7.         for (int i = startIndex; i < nums.size(); i++) { 
  8.             // 而我們要對同一樹層使用過的元素進行跳過 
  9.             if (i > startIndex && nums[i] == nums[i - 1] ) { // 注意這里使用i > startIndex 
  10.                 continue
  11.             } 
  12.             path.push_back(nums[i]); 
  13.             backtracking(nums, i + 1); 
  14.             path.pop_back(); 
  15.         } 
  16.     } 
  17.  
  18. public
  19.     vector<vector<int>> subsetsWithDup(vector<int>& nums) { 
  20.         result.clear(); 
  21.         path.clear(); 
  22.         sort(nums.begin(), nums.end()); // 去重需要排序 
  23.         backtracking(nums, 0); 
  24.         return result; 
  25.     } 
  26. }; 

總結

其實這道題目的知識點,我們之前都講過了,如果之前講過的子集問題和去重問題都掌握的好,這道題目應該分分鐘AC。

當然本題去重的邏輯,也可以這么寫

  1. if (i > startIndex && nums[i] == nums[i - 1] ) { 
  2.         continue

其他語言版本

Java

  1. class Solution { 
  2.    List<List<Integer>> result = new ArrayList<>();// 存放符合條件結果的集合 
  3.    LinkedList<Integer> path = new LinkedList<>();// 用來存放符合條件結果 
  4.    boolean[] used; 
  5.     public List<List<Integer>> subsetsWithDup(int[] nums) { 
  6.         if (nums.length == 0){ 
  7.             result.add(path); 
  8.             return result; 
  9.         } 
  10.         Arrays.sort(nums); 
  11.         used = new boolean[nums.length]; 
  12.         subsetsWithDupHelper(nums, 0); 
  13.         return result; 
  14.     } 
  15.  
  16.     private void subsetsWithDupHelper(int[] nums, int startIndex){ 
  17.         result.add(new ArrayList<>(path)); 
  18.         if (startIndex >= nums.length){ 
  19.             return
  20.         } 
  21.         for (int i = startIndex; i < nums.length; i++){ 
  22.             if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]){ 
  23.                 continue
  24.             } 
  25.             path.add(nums[i]); 
  26.             used[i] = true
  27.             subsetsWithDupHelper(nums, i + 1); 
  28.             path.removeLast(); 
  29.             used[i] = false
  30.         } 
  31.     } 

Python

  1. class Solution: 
  2.     def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: 
  3.         res = []  #存放符合條件結果的集合 
  4.         path = []  #用來存放符合條件結果 
  5.         def backtrack(nums,startIndex): 
  6.             res.append(path[:]) 
  7.             for i in range(startIndex,len(nums)): 
  8.                 if i > startIndex and nums[i] == nums[i - 1]:  #我們要對同一樹層使用過的元素進行跳過 
  9.                     continue 
  10.                 path.append(nums[i]) 
  11.                 backtrack(nums,i+1)  #遞歸 
  12.                 path.pop()  #回溯 
  13.         nums = sorted(nums)  #去重需要排序 
  14.         backtrack(nums,0) 
  15.         return res 

Go

  1. var res[][]int 
  2. func subsetsWithDup(nums []int)[][]int { 
  3.  res=make([][]int,0) 
  4.   sort.Ints(nums) 
  5.  dfs([]int{},nums,0) 
  6.  return res 
  7. func dfs(temp, num []int, start int)  { 
  8.  tmp:=make([]int,len(temp)) 
  9.  copy(tmp,temp
  10.  
  11.  res=append(res,tmp) 
  12.  for i:=start;i<len(num);i++{ 
  13.   if i>start&&num[i]==num[i-1]{ 
  14.    continue 
  15.   } 
  16.   temp=append(temp,num[i]) 
  17.   dfs(temp,num,i+1) 
  18.   temp=temp[:len(temp)-1] 
  19.  } 

Javascript

  1. var subsetsWithDup = function(nums) { 
  2.     let result = [] 
  3.     let path = [] 
  4.     let sortNums = nums.sort((a, b) => { 
  5.         return a - b 
  6.     }) 
  7.     function backtracing(startIndex, sortNums) { 
  8.         result.push(path.slice(0)) 
  9.         if(startIndex > nums.length - 1) { 
  10.             return 
  11.         } 
  12.         for(let i = startIndex; i < nums.length; i++) { 
  13.             if(i > startIndex && nums[i] === nums[i - 1]) { 
  14.                 continue 
  15.             } 
  16.             path.push(nums[i]) 
  17.             backtracing(i + 1, sortNums) 
  18.             path.pop() 
  19.         } 
  20.     } 
  21.     backtracing(0, sortNums) 
  22.     return result 
  23. }; 

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2021-10-12 08:43:20

排列回溯算法

2021-09-29 11:30:03

子集問題模板題

2022-12-02 14:12:52

新能源汽車海爾

2017-01-18 18:28:54

大數據數據庫技術

2024-04-07 00:00:03

2024-10-12 08:01:53

2019-06-06 15:00:25

手機iPhone摩托羅拉

2025-07-17 14:33:51

2025-01-20 00:00:00

Java語言Record

2018-12-27 08:50:06

JavaScript開源

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-12-20 08:23:53

NIO組件非阻塞

2023-04-26 10:21:04

2024-04-30 09:02:48

2023-12-12 08:41:01

2016-03-18 19:03:35

認知計算IBM

2024-07-17 08:12:06

2020-02-20 08:30:49

OSPF網絡協議路由協議

2022-11-28 00:04:17

點贊
收藏

51CTO技術棧公眾號

成人在线免费视频| 亚洲美女性视频| 欧美成人剧情片在线观看| 精品少妇人欧美激情在线观看| 99国产精品免费| 国产高清中文字幕在线| 国产在线精品一区二区三区不卡| 一本一本久久a久久精品综合麻豆| 96精品久久久久中文字幕| 极品尤物一区二区| 日韩精品影院| 久久综合精品国产一区二区三区| 久久久日本电影| 可以看的av网址| 黄色av电影在线观看| 日韩av在线发布| 日韩一卡二卡三卡| 中文有码久久| 91激情在线观看| 成人中文视频| 欧美日韩三级一区| 久久精品国产第一区二区三区最新章节 | www.啪啪.com| 成人在线app| 国产在线视视频有精品| 7m第一福利500精品视频| 久久国产劲爆∧v内射| 羞羞电影在线观看www| 国产精品1区二区.| 欧美精品第一页在线播放| 免费观看黄网站| 欧美日韩成人影院| 五月天久久比比资源色| 久久riav| а√天堂资源在线| 激情国产一区| 亚洲精品按摩视频| 国产免费一区二区三区视频| 美国一级片在线免费观看视频 | 综合综合综合综合综合网| 精品成人久久av| 51蜜桃传媒精品一区二区| 亚洲欧美va天堂人熟伦| 国产a亚洲精品| 国产精品久久久久久久久免费丝袜 | 国产精品毛片一区二区三区| 亚洲精品在线观看www| 色婷婷综合久久久久中文字幕| 超碰国产在线| 久久久久国产精品人| 国产在线视频欧美| 久久久久97国产| 日韩免费电影在线观看| 欧美少妇bbb| 性欧美极品xxxx欧美一区二区| 精品麻豆一区二区三区| 国产精品第五页| 亚洲资源在线网| 黄色一级大片在线免费看国产一| 久久综合婷婷| 久久99久久久久久久噜噜| 久久无码人妻精品一区二区三区 | 欧美系列亚洲系列| 日本三级福利片| 亚洲三区在线播放| 国产一区不卡精品| 99精品国产高清在线观看| 国产www在线| 亚洲综合中文| 在线激情影院一区| 中文字幕乱码在线| 在线观看亚洲精品福利片| 午夜影院久久久| 在线视频亚洲自拍| 亚洲第一图区| 精品欧美一区二区三区| gogogo免费高清日本写真| a视频在线观看免费| 精品亚洲夜色av98在线观看| 一区二区高清视频| 成人高清免费在线| 欧美不卡在线| 波多野结衣在线一区二区| 亚洲曰韩产成在线| 日韩欧美一区二区在线观看 | 97超碰在线资源| 欧美一级免费| 欧美性猛交xxxx免费看久久久| 中文字幕在线亚洲精品| 日韩伦理电影网站| 色综合网色综合| 99日在线视频| 欧美成人app| 欧美性生交xxxxx久久久| 天天爽人人爽夜夜爽| 小视频免费在线观看| 亚洲电影第三页| 免费网站永久免费观看| 日本黄色片在线观看| 欧美经典一区二区| 欧美日韩亚洲免费| 亚洲三级中文字幕| 国产精品免费av| 视频一区二区综合| 精品亚洲成a人片在线观看| 波多野结衣中文字幕一区二区三区 | 亚洲国产天堂久久综合网| 欧美性受xxxx黑人| 雨宫琴音一区二区在线| 国产精品免费一区豆花| 日韩色图在线观看| 国产在线精品一区二区夜色| 欧美1o一11sex性hdhd| 亚洲卡一卡二卡三| 国产精品主播直播| 亚洲福利在线播放| 女人帮男人橹视频播放| 亚洲成人激情社区| 日韩欧美成人激情| 性折磨bdsm欧美激情另类| 一区二区三区| 亚洲色图欧美制服丝袜另类第一页 | 污污的视频在线观看| 欧美性大战久久| 中国极品少妇videossexhd| av男人一区| 久久精品人人做人人爽| 黄色录像免费观看| 国产精品88久久久久久| 久久精品这里热有精品| 久久黄色精品视频| 天堂久久久久va久久久久| 99久久一区三区四区免费| av电影在线观看| 国产精品国产a| 欧美伦理视频在线观看| 伊甸园亚洲一区| 在线观看视频亚洲| aaa在线视频| 国产美女主播视频一区| 亚洲春色综合另类校园电影| 九七电影韩国女主播在线观看| 欧美性猛交xxxx富婆弯腰| 国产人成视频在线观看| 欧美激情在线| 国产成人欧美在线观看| 国产又粗又猛又爽又黄91| 国产成人免费av在线| 在线无限看免费粉色视频| 成人在线视频免费看| 一区二区三区久久精品| 免费在线不卡av| 国产一区二区三区视频在线播放| 亚洲精品高清国产一线久久| 美女色狠狠久久| 中文字幕欧美精品日韩中文字幕| 欧美日韩在线视频免费| 国产日韩一区二区三区在线| 国产美女99p| h视频网站在线观看| 在线观看视频91| www.久久com| 久久99国产成人小视频| 青青草原成人在线视频| 国产精品一区二区av白丝下载| 国产精品沙发午睡系列990531| 超碰在线人人爱| 亚洲精品tv久久久久久久久久| 欧美激情一级二级| 蜜桃av噜噜一区二区三区麻豆| 99久久er热在这里只有精品15| 艳色歌舞团一区二区三区| 亚洲综合资源| 久久久这里只有精品视频| 视频二区在线| 亚洲精品高清在线| 婷婷激情四射五月天| 欧美xxav| 国产精品久久久久久久久久ktv | 国产69精品久久久久9999人| 色悠悠国产精品| 国产在线观看免费av| 麻豆成人91精品二区三区| 久久青青草综合| 天堂久久午夜av| 操91在线视频| 在线免费观看日韩视频| 久久影院视频免费| 岛国毛片在线播放| 激情综合网五月| 欧美在线免费观看| av网页在线| 精品国产一二三区| 中文字幕电影av| 麻豆精品在线看| 无码人妻精品一区二区蜜桃网站| 亚洲精品小区久久久久久| 国产精品最新在线观看| 国产视频网址在线| 一本高清dvd不卡在线观看| 看黄色录像一级片| 91在线视频网址| 色18美女社区| 美女久久网站| 奇米精品在线| 日韩成人亚洲| 欧美精品xxx| 免费黄色在线观看| 欧美日韩成人综合天天影院| 日本三级理论片| 波多野结衣中文一区| 亚洲36d大奶网| 亚洲视频成人| 免费在线看黄色片| 国产精品久久久久久久久久10秀 | 成a人片在线观看www视频| 日韩欧美电影一区| 毛片在线免费播放| 国产三级精品在线| www.涩涩涩| 中文精品在线| 久久久99国产精品免费| 日韩中文字幕视频网| 欧美激情一区二区三区高清视频| 成年人在线视频免费观看| 亚洲精品99久久久久中文字幕| 国产裸体无遮挡| 亚洲一区精品在线| 久久久国产精品无码| 国产麻豆欧美日韩一区| 自拍偷拍21p| 日本麻豆一区二区三区视频| 亚洲 高清 成人 动漫| 国内精品久久久久久99蜜桃| 精品久久中出| 国产精品亚洲成在人线| 九九久久久久久久久激情| 无遮挡的视频在线观看| 在线日韩av观看| 国产免费视频在线| 国产一区二区动漫| 盗摄牛牛av影视一区二区| 久久久成人av| 9色在线视频网站| 亚洲色图色老头| 男女av在线| 亚洲欧美国产精品专区久久| 午夜影院在线视频| 日韩av网站导航| 伊人影院中文字幕| 一区二区在线观看av| 亚洲一区欧美在线| 国产一区二区三区在线看麻豆| 一区二区xxx| 日韩精品视频网站| 亚洲一级片免费| 麻豆精品视频在线| 日本精品一区在线| 亚洲影视综合| 最新欧美日韩亚洲| 无码人妻精品一区二区蜜桃色欲 | 欧美久久久久久一卡四| 国产精品亚洲人成在99www| 欧美日韩一区综合| 日韩成人三级| 91精品国产一区二区三区动漫 | 国产对白在线播放| 欧美视频在线观看| 日本免费不卡一区二区| 久久久精品网| 手机版av在线| 男人的天堂亚洲在线| 蜜臀久久99精品久久久酒店新书 | 欧美成人三级视频网站| 白白色在线观看| 日韩中文有码在线视频| 老司机99精品99| 久久久亚洲天堂| 新片速递亚洲合集欧美合集| 久久久亚洲成人| 成人勉费视频| 97视频在线观看播放| 国产网站在线免费观看| 久久久久久久久中文字幕| 深夜成人在线| 欧美极品少妇xxxxⅹ免费视频| 成人女同在线观看| 国产精品1区2区在线观看| 国产精品久久久久久久久久辛辛 | 婷婷综合久久| 成人免费性视频| 色999日韩| 少妇久久久久久被弄到高潮| 欧美激情欧美| 2019日韩中文字幕mv| 日本在线不卡视频一二三区| 日本成人在线免费| 国产精品乱码一区二区三区软件 | 国产在线激情| 欧美中文字幕视频| 国产专区精品| 日韩国产一区久久| 日韩一级大片| 久久精品视频在线观看免费| 久久久久久久久久看片| 麻豆亚洲av熟女国产一区二 | 亚洲乱码一区二区三区三上悠亚| 欧美日本免费| 182午夜在线观看| 久久亚洲精华国产精华液| 国产又黄又爽又无遮挡| 欧美图片一区二区三区| 天天综合网在线观看| 日韩电影免费观看在线观看| caopeng在线| 国产精品自产拍在线观| 国产一卡不卡| 国产亚洲天堂网| 久久先锋资源| 亚洲中文字幕无码一区| 亚洲免费观看高清| 亚洲一区二区91| 精品视频一区二区不卡| 日韩电影在线观看完整版| 国产亚洲精品久久久久久牛牛| 黑人玩欧美人三根一起进| 91热福利电影| 高清欧美性猛交xxxx黑人猛| 亚洲图片欧洲图片日韩av| 老司机午夜精品视频| 制服丝袜第二页| 午夜视频在线观看一区二区| 亚洲国产精品成人久久蜜臀| 久久中文字幕一区| 高清久久精品| 黑人巨大国产9丨视频| 激情成人亚洲| 美国黄色一级视频| 一区二区久久久久久| 国产伦子伦对白视频| 久久精品成人欧美大片| 午夜不卡一区| 免费看av软件| 国产一区二区看久久| 紧身裙女教师波多野结衣| 性感美女久久精品| 隣の若妻さん波多野结衣| 久久久久久久网站| 高潮按摩久久久久久av免费| 日本欧美黄色片| 蜜臀久久久99精品久久久久久| 欧美体内she精高潮| 亚洲精品国产无天堂网2021| www.污视频| 久久久久久免费精品| 国产乱人伦丫前精品视频| 亚洲熟妇av日韩熟妇在线| 久久综合九色综合97婷婷| 人妻中文字幕一区二区三区| 色av吧综合网| 一区二区三区四区高清视频 | 国产欧美亚洲精品| 99久久久久国产精品| 免费国偷自产拍精品视频| 亚洲午夜免费电影| 色播色播色播色播色播在线 | 中文字幕一区二区三区不卡在线| 91精品国产色综合久久不8| 不卡伊人av在线播放| 精品国产一区二区三区成人影院 | 97天天综合网| 国产主播欧美精品| 欧美在线免费| 少妇户外露出[11p]| 在线亚洲一区二区| 免费av在线网站| 国产伦一区二区三区色一情| 视频一区国产视频| 久久精品黄色片| 日韩精品中文字幕在线观看| 久久久久久久性潮| 欧美亚洲黄色片| 日本一区二区三区在线不卡| 国产精品无码天天爽视频| 国外成人在线直播| 成人久久一区| 国产伦精品一区二区三区精品 | jizz中国少妇| 最近2019免费中文字幕视频三| 国产区一区二| 免费无码av片在线观看| 自拍偷拍欧美精品| 一级视频在线播放| 午夜精品www| 欧美第十八页| 中出视频在线观看| 777亚洲妇女| 老司机在线视频二区| 精品一区二区三区日本| 九一九一国产精品|