LeetCode - 47. 全排列 II

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

示例:

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

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/permutations-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有熟空。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)昏名,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處渠抹。

算法

思考:返回所有不重復(fù)的全排列
結(jié)果集不重復(fù):
1樱报、根據(jù) 47.全排列葬项,得到所有結(jié)果后去重
2、過(guò)程中去重(推薦)

swift
  • 結(jié)果去重
// 結(jié)果去重迹蛤,利用set元素不重復(fù)特性保存結(jié)果集
 
 var result = Set<[Int]>()
 func permuteUnique(_ nums: [Int]) -> [[Int]] {
     if nums.count == 0 {
         return [[Int]]()
     }
     let used = [Bool](repeating: false, count: nums.count)
     dfs(nums, nums.count, 0, [Int](), used)
     return [[Int]](result)
 }

 func dfs(_ nums: [Int],_ length: Int, _ depth: Int, _ path: [Int], _ used: [Bool]) {
     if length == depth {
         result.insert(path)
         return
     }
     for i in 0..<length {
         if !used[i] {
             var newPath = path
             newPath.append(nums[i])
             
             var newUsed = used
             newUsed[i] = true
             dfs(nums, length, depth+1, newPath, newUsed)
         }
     }
 }
  • 過(guò)程去重
/**
 過(guò)程去重
 參考題解: https://leetcode-cn.com/problems/permutations-ii/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liwe-2/
 */

var result = [[Int]]()
func permuteUnique(_ nums: [Int]) -> [[Int]] {
    // 過(guò)濾邊界
    if nums.count == 0 {
        return result
    }
    // 排序
    let nums = nums.sorted()
    // 訪問(wèn)標(biāo)記位
    var used = [Bool](repeating: false, count: nums.count)
    // 訪問(wèn)路徑
    var path = [Int]()
    dfs(nums, nums.count, 0, &path, &used)
    return result
}

func dfs(_ nums: [Int],_ length: Int, _ depth: Int, _ path: inout [Int], _ used: inout [Bool]) {
    // 遞歸終結(jié)條件
    if length == depth {
        result.append([Int](path))
        return
    }
    for i in 0..<length {
        // 未被訪問(wèn)
        if !used[i] {
            // 剪枝條件
            // i > 0 : 0是第一個(gè)民珍,沒(méi)有之前的元素可以比較是否重復(fù)襟士,保證后面的nums[i-1]有效
            // used[i-1] 或者 !used[i-1] 的選擇可以參考題解的最后解釋
            if i > 0 && nums[i] == nums[i-1] && !used[i-1] {
                continue
            }
            // 添加路徑
            path.append(nums[i])
            // 添加標(biāo)記位 已訪問(wèn)
            used[i] = true
            dfs(nums, length, depth+1, &path, &used)
            // 回溯
            used[i] = false
            path.removeLast()
        }
    }
}

GitHub:https://github.com/huxq-coder/LeetCode
歡迎star

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嚷量,隨后出現(xiàn)的幾起案子陋桂,更是在濱河造成了極大的恐慌,老刑警劉巖蝶溶,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗜历,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡身坐,警方通過(guò)查閱死者的電腦和手機(jī)秸脱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門落包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)部蛇,“玉大人,你說(shuō)我怎么就攤上這事咐蝇⊙穆常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵有序,是天一觀的道長(zhǎng)抹腿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旭寿,這世上最難降的妖魔是什么警绩? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮盅称,結(jié)果婚禮上肩祥,老公的妹妹穿的比我還像新娘。我一直安慰自己缩膝,他們只是感情好混狠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疾层,像睡著了一般将饺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痛黎,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天予弧,我揣著相機(jī)與錄音,去河邊找鬼湖饱。 笑死掖蛤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琉历。 我是一名探鬼主播坠七,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼水醋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了彪置?” 一聲冷哼從身側(cè)響起拄踪,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拳魁,沒(méi)想到半個(gè)月后惶桐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潘懊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年姚糊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片授舟。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡救恨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出释树,到底是詐尸還是另有隱情肠槽,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布奢啥,位于F島的核電站秸仙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桩盲。R本人自食惡果不足惜寂纪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赌结。 院中可真熱鬧捞蛋,春花似錦、人聲如沸姑曙。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伤靠。三九已至捣域,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宴合,已是汗流浹背焕梅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卦洽,地道東北人贞言。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阀蒂,于是被迫代替她去往敵國(guó)和親该窗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弟蚀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355