精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲乱码国产乱码精品精大量| 蜜桃网站成人| 久久精品第一页| 日韩激情啪啪| 欧美日韩精品一区二区天天拍小说| 亚洲午夜在线观看| 丁香花免费高清完整在线播放| 鲁大师影院一区二区三区| 色爱av美腿丝袜综合粉嫩av| 亚洲成a人片在线www| 欧美美女日韩| 亚洲一区在线观看免费观看电影高清 | 欧美乱偷一区二区三区在线| 国产精品探花视频| 欧美亚洲一区| 欧美日韩成人在线播放| 日本一级免费视频| 国产欧美三级电影| 欧美乱熟臀69xxxxxx| 免费无码不卡视频在线观看| 国产福利视频在线| 国产欧美日韩麻豆91| 国产三级精品在线不卡| 一卡二卡三卡在线观看| 午夜亚洲福利在线老司机| 久久精品人人做人人爽| 成人妇女淫片aaaa视频| 欧美二区不卡| 欧美亚洲国产一区二区三区 | 国产精品无码一区二区三| 欧美一区=区三区| 亚洲成av人电影| 亚洲精品日韩久久久| 四虎国产精品永久免费观看视频| 亚洲欧洲自拍| 亚洲va国产va欧美va观看| 影音先锋亚洲视频| 第九色区av在线| 91蜜桃传媒精品久久久一区二区| 99九九视频| 国产精品一二三四五区| 日本va欧美va瓶| 国产91在线播放精品91| 久草国产精品视频| 国产精品av一区二区| 美女av一区二区| 午夜国产小视频| 久久视频在线| 神马久久久久久| 91视频免费看片| jvid福利在线一区二区| 国产一区二区三区在线观看精品| 国产成人在线一区| 久久国产视频一区| 久久精品卡一| 国产ts人妖一区二区三区| 午夜精品久久久久久久久久久久久蜜桃| 午夜精品视频| 欧美高跟鞋交xxxxhd| 久久国产精品波多野结衣| 激情久久婷婷| 欧美亚洲日本黄色| 人人爽人人爽人人片av| 丝袜美腿亚洲色图| 国产日韩欧美黄色| 一本色道久久综合无码人妻| 狠狠狠色丁香婷婷综合久久五月| 国产一区二区丝袜高跟鞋图片| 久久久999久久久| 裸体在线国模精品偷拍| 亚洲www在线观看| 亚洲免费一级片| 99精品视频在线免费观看| 麻豆久久久9性大片| 成人免费在线视频网| 成人欧美一区二区三区视频网页 | 91这里只有精品| 国产精品久久久久久久久搜平片| 欧美日韩中文字幕在线播放 | 国产成人精品优优av| 少妇又紧又色又爽又刺激视频| 久久99精品久久只有精品| 91精品国产高清久久久久久91裸体| 精品二区在线观看| 91视频在线看| 一本一道久久久a久久久精品91 | 欧美重口另类videos人妖| 黄色av一区二区| 韩国三级在线一区| 精品欧美一区二区三区久久久 | 久久av在线看| 日韩精品在线不卡| 日本欧美大码aⅴ在线播放| 亚洲影院色无极综合| 亚洲av电影一区| 亚洲欧美综合在线精品| 国产精品一区二区免费在线观看| 成人影院在线免费观看| 欧美精品一区二区三区高清aⅴ| 国产色视频一区二区三区qq号| 久久性感美女视频| 136fldh精品导航福利| 国产又粗又猛又黄| 97超碰欧美中文字幕| 久久av秘一区二区三区| 自拍偷拍欧美视频| 日韩欧美123| 精品国产aaa| 99精品视频免费观看| 91精品国产综合久久香蕉的用户体验 | 久久久久久久久精| 日本伊人午夜精品| 国产一区二区免费电影| 超碰在线网址| 在线观看国产日韩| 国产精品无码专区| 欧美日本国产| 91九色视频在线| 看电影就来5566av视频在线播放| 亚洲宅男天堂在线观看无病毒| 色一情一乱一伦一区二区三区日本| 一区二区三区视频播放| www.xxxx精品| 日本欧美www| wwwwxxxxx欧美| 国产精品久久久久久久乖乖| 曰本一区二区| 视频直播国产精品| 在线观看国产区| 久久久夜色精品亚洲| 国产美女主播在线| 永久免费精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 精品久久久久久久久久久国产字幕| 成人国产精品免费观看视频| 99热这里只有精品免费| 高清一区二区三区av| 搡老女人一区二区三区视频tv| 黄色一级视频免费看| 99精品久久只有精品| 中国丰满熟妇xxxx性| 免费观看亚洲视频大全| 久久久av免费| 92久久精品一区二区| 国产精品久久三区| 手机免费av片| 天天做天天爱天天综合网2021 | 国产裸体无遮挡| 1024亚洲合集| 秋霞午夜鲁丝一区二区| 欧美激情视频一区二区三区在线播放 | 久久这里只有精品视频首页| 国产精品乱码一区二区| 亚洲欧美日韩电影| 麻豆传媒在线看| 欧美视频导航| 精品国产_亚洲人成在线| 久草在线资源福利站| 亚洲美女性生活视频| 91porny九色| 国产精品午夜电影| 亚洲一区二区偷拍| 欧美激情亚洲| 蜜桃狠狠色伊人亚洲综合网站| 亚洲午夜天堂| 最好看的2019的中文字幕视频| 亚洲视频久久久| 亚洲精品久久嫩草网站秘色| 亚洲高清无码久久| 久久一区激情| 中文网丁香综合网| 国产精品高潮呻吟久久久久| 91成人在线播放| 都市激情在线视频| 91精品国产一区二区人妖| 日本女人性视频| 亚洲一级黄色| 日韩欧美精品一区二区| 国产精品日本一区二区不卡视频 | 精品无码久久久久久久久| 99这里只有精品| 日韩不卡一二三| 欧美精品一线| 国产精品一区二区在线观看 | av免费在线一区二区三区| 91精品在线观看入口| 国产成人精品a视频一区| 欧美经典一区二区| 69亚洲乱人伦| 蜜臀91精品一区二区三区 | 免费三级在线观看| 北岛玲一区二区三区四区| 日韩免费高清在线| 欧美+亚洲+精品+三区| 欧美男人的天堂| 日韩免费一级| 国产成人+综合亚洲+天堂| 国产黄色小视频在线| 亚洲欧美精品一区| 亚洲高清视频网站| 在线观看视频一区二区 | 夜夜爽av福利精品导航| 亚洲欧洲精品一区二区| 老汉色老汉首页av亚洲| 成人久久18免费网站图片| 老司机深夜福利在线观看| 久久亚洲精品网站| 成人高清网站| 亚洲精品久久久久久久久久久久 | 91性感美女视频| 免费欧美一级片| 久久国产精品区| 黄色片一级视频| 亚洲精品孕妇| 成人在线视频一区二区三区| 欧美久久综合网| 久久一区免费| 国产一区二区三区不卡av| 成人黄色在线免费| 成人精品三级| 日本久久久久久久| 妞干网免费在线视频| 欧美精品激情视频| 福利视频在线| 色妞欧美日韩在线| 992tv免费直播在线观看| 亚洲欧美国产va在线影院| 成人免费一级视频| 日韩视频免费观看高清完整版 | www.av毛片| 欧美在线网站| 欧美xxxx吸乳| 亚洲精品中文字幕乱码| 一区二区三区我不卡| 欧洲grand老妇人| 日本精品一区二区三区视频| 欧美sm一区| 久久全球大尺度高清视频| 18+视频在线观看| 欧美精品一区二| 亚洲国产欧美另类| 日韩你懂的在线观看| 国产高清免费在线观看| 日韩视频免费观看高清在线视频| 国产又爽又黄又嫩又猛又粗| 欧美日韩色综合| 一级久久久久久久| 在线综合视频播放| 国产麻豆免费观看| 精品捆绑美女sm三区| 国模人体一区二区| 亚洲国产另类久久精品| 无码国产色欲xxxx视频| 亚洲欧美精品伊人久久| 国产露出视频在线观看| 中文字幕视频在线免费欧美日韩综合在线看 | 久久在线免费观看| www..com.cn蕾丝视频在线观看免费版| 久久久亚洲高清| 免费黄色在线网址| 亚洲免费电影在线| 国产在线拍揄自揄拍| 欧美日韩国产一区在线| 懂色av中文字幕| 91麻豆精品国产综合久久久久久 | 亚洲精品av在线播放| 飘雪影视在线观看免费观看| 亚洲午夜久久久影院| 激情成人四房播| 欧美激情中文网| 不卡一二三区| 91精品久久久久久久久久另类| 美女久久精品| 免费看成人av| 国产精品99久久久久久动医院| 特级西西人体www高清大胆| 日韩午夜电影| the porn av| 懂色中文一区二区在线播放| 亚洲黄色在线网站| 亚洲欧洲日韩在线| 日本一级一片免费视频| 欧美在线不卡一区| 亚洲不卡免费视频| 亚洲视频电影图片偷拍一区| 成年人黄视频在线观看| 国产91ⅴ在线精品免费观看| 日韩有码欧美| 久久99精品久久久久久青青日本 | www亚洲一区| 18岁成人毛片| 一本色道a无线码一区v| a天堂视频在线| 亚洲全黄一级网站| 免费在线看污片| 国产精品美女在线观看| 国产福利资源一区| 一区高清视频| 久久资源在线| 中文字幕一区二区人妻电影丶| 亚洲欧洲av在线| 日韩美一区二区| 精品福利在线导航| 麻豆最新免费在线视频| 这里精品视频免费| 国产乱码在线| 成人伊人精品色xxxx视频| 亚洲动漫精品| 高清无码视频直接看| 美女视频黄频大全不卡视频在线播放 | 成人午夜在线| 欧美精品亚洲| 99综合视频| 永久看看免费大片| 国产精品国产三级国产| 中文字幕在线播| 亚洲精品久久久久久久久久久久| 成人福利在线观看视频| 国产精品在线看| 美女久久久久| 日韩免费一级视频| 成人av在线观| 人妻少妇精品一区二区三区| 欧美色综合网站| 国产主播福利在线| 2019亚洲男人天堂| 精品国产午夜肉伦伦影院| 91视频成人免费| 精品一区二区三区蜜桃| 在线观看免费小视频| 色综合久久久久| 欧洲亚洲在线| 欧美一区二区视频97| 欧美日韩直播| 日日碰狠狠添天天爽超碰97| 成人妖精视频yjsp地址| 欧美日韩免费做爰视频| 欧美一区二区三区公司| 黄黄的网站在线观看| 国产专区精品视频| 91精品国产调教在线观看| 亚洲黄色av片| 亚洲人成伊人成综合网小说| 91在线你懂的| 欧美日韩国产二区| 中文无码日韩欧| 加勒比成人在线| 91丨porny丨蝌蚪视频| 免费av网站在线| 亚洲香蕉成人av网站在线观看| 欧美日韩在线精品一区二区三区激情综合 | 日韩欧美第二区在线观看| 日韩精品一区第一页| 欧美人妻一区二区三区 | 性生活免费网站| 欧美精品videos| 人人精品亚洲| 日本久久精品一区二区| 国产精品第13页| 午夜精品久久久久久久99老熟妇| 欧美激情视频在线免费观看 欧美视频免费一 | 国产精品福利导航| 一本大道久久a久久精品综合| 国产乱视频在线观看| 成人精品一区二区三区电影黑人 | 中文字幕一区不卡| a毛片在线免费观看| 97婷婷涩涩精品一区| 久久97视频| 日本不卡一区二区在线观看| 有码一区二区三区| 日韩二区三区| 91精品国产综合久久香蕉最新版 | 欧美日韩免费观看一区=区三区| 亚洲视频天天射| 色综合天天综合色综合av| 色视频在线免费观看| 91精品婷婷国产综合久久蝌蚪| 亚洲三级毛片| 欧洲性xxxx| 欧美大胆人体bbbb| av高清不卡| 国产成人精品免费看在线播放 | 免费黄在线观看| 日韩一区二区在线看片| 日韩欧美看国产| 欧美美女黄色网| 国产亚洲福利社区一区| 草逼视频免费看| 国产精品99久久久久久白浆小说 | 欧美精品做受xxx性少妇| 婷婷五月色综合香五月| 91女神在线观看| 欧美日韩国产中文字幕| 免费高清完整在线观看| 久久精品中文字幕一区二区三区 | 91精品久久久久久蜜臀| 91吃瓜在线观看| 欧美亚洲视频一区| 久久久久国产成人精品亚洲午夜|