国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

排列問題也要去重了!

開發(fā) 前端
如果對(duì)回溯算法基礎(chǔ)還不了解的話,我還特意錄制了一期視頻:帶你學(xué)透回溯算法(理論篇) 可以結(jié)合題解和視頻一起看,希望對(duì)大家理解回溯算法有所幫助。

[[428322]]

全排列 II

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

給定一個(gè)可包含重復(fù)數(shù)字的序列 nums ,按任意順序 返回所有不重復(fù)的全排列。

示例 1:

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

示例 2:

  • 輸入:nums = [1,2,3]
  • 輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

提示:

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10

思路

如果對(duì)回溯算法基礎(chǔ)還不了解的話,我還特意錄制了一期視頻:帶你學(xué)透回溯算法(理論篇) 可以結(jié)合題解和視頻一起看,希望對(duì)大家理解回溯算法有所幫助。

這道題目和全排列的區(qū)別在與給定一個(gè)可包含重復(fù)數(shù)字的序列,要返回所有不重復(fù)的全排列。

這里又涉及到去重了。

在組合總和II 、子集II我們分別詳細(xì)講解了組合問題和子集問題如何去重。

那么排列問題其實(shí)也是一樣的套路。

還要強(qiáng)調(diào)的是去重一定要對(duì)元素經(jīng)行排序,這樣我們才方便通過相鄰的節(jié)點(diǎn)來判斷是否重復(fù)使用了。

我以示例中的 [1,1,2]為例 (為了方便舉例,已經(jīng)排序)抽象為一棵樹,去重過程如圖:

全排列II1

圖中我們對(duì)同一樹層,前一位(也就是nums[i-1])如果使用過,那么就進(jìn)行去重。

一般來說:組合問題和排列問題是在樹形結(jié)構(gòu)的葉子節(jié)點(diǎn)上收集結(jié)果,而子集問題就是取樹上所有節(jié)點(diǎn)的結(jié)果。

在46.全排列中已經(jīng)詳解講解了排列問題的寫法,在40.組合總和II 、90.子集II中詳細(xì)講解的去重的寫法,所以這次我就不用回溯三部曲分析了,直接給出代碼,如下:

C++代碼

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; 
  4.     vector<int> path; 
  5.     void backtracking (vector<int>& nums, vector<bool>& used) { 
  6.         // 此時(shí)說明找到了一組 
  7.         if (path.size() == nums.size()) { 
  8.             result.push_back(path); 
  9.             return
  10.         } 
  11.         for (int i = 0; i < nums.size(); i++) { 
  12.             // used[i - 1] == true,說明同一樹支nums[i - 1]使用過 
  13.             // used[i - 1] == false,說明同一樹層nums[i - 1]使用過 
  14.             // 如果同一樹層nums[i - 1]使用過則直接跳過 
  15.             if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) { 
  16.                 continue
  17.             } 
  18.             if (used[i] == false) { 
  19.                 used[i] = true
  20.                 path.push_back(nums[i]); 
  21.                 backtracking(nums, used); 
  22.                 path.pop_back(); 
  23.                 used[i] = false
  24.             } 
  25.         } 
  26.     } 
  27. public
  28.     vector<vector<int>> permuteUnique(vector<int>& nums) { 
  29.         result.clear(); 
  30.         path.clear(); 
  31.         sort(nums.begin(), nums.end()); // 排序 
  32.         vector<bool> used(nums.size(), false); 
  33.         backtracking(nums, used); 
  34.         return result; 
  35.     } 
  36. }; 

拓展

大家發(fā)現(xiàn),去重最為關(guān)鍵的代碼為:

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

如果改成 used[i - 1] == true, 也是正確的!,去重代碼如下:

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

這是為什么呢,就是上面我剛說的,如果要對(duì)樹層中前一位去重,就用used[i - 1] == false,如果要對(duì)樹枝前一位去重用used[i - 1] == true。

對(duì)于排列問題,樹層上去重和樹枝上去重,都是可以的,但是樹層上去重效率更高!

這么說是不是有點(diǎn)抽象?

來來來,我就用輸入: [1,1,1] 來舉一個(gè)例子。

樹層上去重(used[i - 1] == false),的樹形結(jié)構(gòu)如下:

全排列II2

樹枝上去重(used[i - 1] == true)的樹型結(jié)構(gòu)如下:

全排列II

大家應(yīng)該很清晰的看到,樹層上對(duì)前一位去重非常徹底,效率很高,樹枝上對(duì)前一位去重雖然最后可以得到答案,但是做了很多無用搜索。

總結(jié)

這道題其實(shí)還是用了我們之前講過的去重思路,但有意思的是,去重的代碼中,這么寫:

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

和這么寫:

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

都是可以的,這也是很多同學(xué)做這道題目困惑的地方,知道used[i - 1] == false也行而used[i - 1] == true也行,但是就想不明白為啥。

所以我通過舉[1,1,1]的例子,把這兩個(gè)去重的邏輯分別抽象成樹形結(jié)構(gòu),大家可以一目了然:為什么兩種寫法都可以以及哪一種效率更高!

是不是豁然開朗了!!

本文轉(zhuǎn)載自微信公眾號(hào)「代碼隨想錄」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系代碼隨想錄公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 代碼隨想錄
相關(guān)推薦

2021-10-08 11:13:41

子集問題數(shù)據(jù)結(jié)構(gòu)算法

2020-07-24 10:11:19

AI 數(shù)據(jù)人工智能

2022-05-05 09:23:21

裁員程序員危機(jī)

2021-12-29 06:24:16

AI審稿人工智能

2021-09-29 07:41:27

前端技術(shù)編程

2021-11-19 07:54:40

前端

2019-11-14 22:04:09

AIJohn CarmacVR

2010-05-11 11:04:11

曹重英

2019-04-16 14:12:29

AI機(jī)器學(xué)習(xí)TensorFlow

2023-02-09 15:30:35

特斯拉AI

2014-12-17 09:57:39

2025-12-08 08:43:00

蘋果AI芯片

2020-12-09 15:26:00

人工智能律師互聯(lián)網(wǎng)

2024-08-30 08:15:59

VueAI工具

2021-11-09 11:56:25

模式數(shù)組排序

2015-05-27 10:11:04

4G

2009-10-16 13:04:18

網(wǎng)絡(luò)綜合布線

2017-05-31 13:40:22

人工智能個(gè)人助手算法分析

2025-09-17 09:06:00

2025-06-03 01:00:00

宇樹合作伙伴資本市場(chǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美久久综合| 国产精品三级电影| 欧美整片在线观看| 欧洲一区二区三区精品| 色综合天天综合网国产成人综合天 | 免费精品视频一区| 欧美久久影院| 国产精品白丝jk喷水视频一区| 91久久青草| 亚洲欧美日韩一区二区在线| 碰碰在线视频| 日韩精品一区二区视频| 波多野结衣在线高清| 亚洲第一av网站| 美女扒开腿让男人桶爽久久软| 精品国产乱码久久久久久老虎| 狂野欧美性猛交xxxxx视频| 日韩精品一区国产麻豆| 欧美人与牲禽动交com| 精品裸体舞一区二区三区| 成人黄色在线电影| 91精品国产色综合久久ai换脸| 麻豆tv免费在线观看| 欧美一级艳片视频免费观看| a级影片在线观看| 亚洲激情在线视频| 成人精品国产| 国内外成人免费激情在线视频 | 亚洲黄色片网站| 韩日成人影院| 中文字幕亚洲精品| 麻豆精品一区| 欧美最猛性xxxxx(亚洲精品)| 亚洲图片久久| 91夜夜未满十八勿入爽爽影院| 欧美激情四色| 天堂√在线观看一区二区| 极品少妇一区二区| 成人免费aaa| 亚洲免费在线观看视频| 手机亚洲第一页| 日韩精品专区在线影院重磅| 精品国模一区二区三区| 97视频在线观看网址| 亚洲激情久久| 中文字幕在线亚洲精品| 国产亚洲欧美色| 天堂v视频永久在线播放| 精品免费一区二区三区| 国产麻豆一区二区三区| 国产精品91在线| 国产亚洲综合精品| 在线观看视频污| 成人app下载| 亚洲欧美日韩第一区| 亚洲伦理久久| 久久精视频免费在线久久完整在线看| 97人人澡人人爽91综合色| 国产欧美韩国高清| 美女黄色成人网| 91丨porny丨探花| 综合激情成人伊人| 欧美三级黄网| 日韩在线观看免费av| 国产欧美亚洲精品a| 欧美日韩天天操 | 国产精品久久久久免费a∨大胸| 午夜久久福利| 欧美 日韩 亚洲 一区| 精品久久久国产精品999| 黄色aa久久| 国产精欧美一区二区三区| 麻豆一区二区99久久久久| 97视频免费| 亚洲精品wwwww| 国产一区二区精品久| 免费看av软件| 欧美性xxxx极品hd欧美风情| aaaa欧美| 91看片淫黄大片一级| 久香视频在线观看| 欧美日韩激情小视频| 一本一生久久a久久精品综合蜜| 国产精品2区| 亚洲成人免费在线视频| 人人玩人人添人人澡欧美| 国产欧美日韩视频一区二区| 黄色在线免费观看大全| 最近2019中文字幕mv免费看 | 久久一区二区三区欧美亚洲| 国产午夜精品久久| 成人超碰在线| 亚洲综合小说区| 国产精品网站在线| 欧美片第一页| 日韩欧美99| 色综合色狠狠天天综合色| 日韩一区免费| 97超碰在线人人| 欧美tk—视频vk| 黄色av一区| 国产精品久久久久白浆| 欧美高清在线播放| 国产二区国产一区在线观看| 午夜看片在线免费| 国产精品一二三视频| 国产精品天天看| 成人综合日日夜夜| 精品少妇人欧美激情在线观看| 欧美一区二区美女| 一本久道久久综合狠狠爱| 日本一卡二卡四卡精品| 国产精品白嫩美女在线观看| 国产精品进线69影院| 波多野结衣在线一区二区 | 成人一区二区三区| 在线天堂新版最新版在线8| 日本一区二区三区www| 欧美日韩国产在线观看| 羞羞答答成人影院www| 97在线观看免费高清视频| 57pao国产精品一区| 中文子幕无线码一区tr| 国产极品模特精品一二| 一区二区在线播放视频| 欧美精品国产精品日韩精品| 国产亚洲美州欧州综合国| 日本精品在线播放| 男人艹女人网站| 国产精品精品视频一区二区三区| 一区二区三区中文字幕电影 | 中文字幕在线播放| 99精品国产高清一区二区| 欧美综合天天夜夜久久| 国产精品av久久久久久麻豆网| 国产三级在线免费| 久久久神马电影| 亚洲精品国产精品久久清纯直播| 精品一区二区成人精品| 亚洲天堂免费电影| 国产女女做受ⅹxx高潮| 欧美亚洲国产另类| 亚洲高清三级视频| 欧美深夜福利| 亚洲图区一区| 国产欧美精品aaaaaa片| 欧美福利在线观看| 亚洲一区二区在线观看视频| 欧美一区网站| av激情在线| 2018国产在线| 日韩av片电影专区| 欧美日韩你懂的| 国产自产视频一区二区三区| 在线观看欧美| 少妇高潮露脸国语对白| 99免费在线观看视频| 精品日本一线二线三线不卡| 另类的小说在线视频另类成人小视频在线| 青青热久免费精品视频在线18| 成熟老妇女视频| 国产欧美精品久久久| 日韩午夜激情av| 91老师国产黑色丝袜在线| 久久在线视频免费观看| 日韩电影免费观看| 欧美黄色一级片视频| 91美女福利视频高清| 亚洲国产91精品在线观看| 久久久99精品久久| 亚洲成人三区| 欧美日韩在线精品一区二区三区激情综合 | 欧美嫩在线观看| 成人午夜视频在线观看| 欧美精选视频在线观看| 色屁屁www国产馆在线观看| 538在线视频观看| 国产欧美日韩伦理| 久热精品视频在线观看一区| 欧美视频在线视频| 99久久99久久精品免费观看| 自拍偷拍欧美| 亚洲青青一区| 男人天堂久久久| 日本黄大片一区二区三区| 欧美日韩国产精品一卡| 欧美福利视频在线观看| 6080yy午夜一二三区久久| 久久久久久久久伊人| 欧美~级网站不卡| 精品国产亚洲一区二区三区在线 | 少妇精品久久久久久久久久| 97碰碰碰免费色视频| 欧美成人欧美edvon| 中文字幕在线一区免费| 日韩一区欧美二区| 成人黄色小视频| 精品一区二区三区中文字幕视频| 黄色网在线播放| 91短视频在线观看|