16.帶重復元素的排列

描述

給出一個具有重復數(shù)字的列表肮街,找出列表所有不同的排列

樣例

給出列表 [1,2,2]熏挎,不同的排列有:

[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]

注意

去重的寫法凝垛,定義visited數(shù)組來記錄是否被添加,因為相同值的nums[i - 1]和nums[i]用list.contains(nums[i - 1])并不能區(qū)分list里面到底加入的是哪一個炸渡,起不到去重效果

代碼

 public class Solution {
    /*
     * @param nums:  A list of integers
     * @return: A list of unique permutations
     */
    public List<List<Integer>> permuteUnique(int[] nums) {
        List<List<Integer>> results = new ArrayList<>();

        if (nums == null) {
            return results;
        }

        if (nums.length == 0) {
            results.add(new ArrayList<Integer>());
            return results;
        }

        // 注意先要對nums排序,因為答案對題目有順序要求
        Arrays.sort(nums);
        ArrayList<Integer> list = new ArrayList<>();
        // 不要忘記將visit數(shù)組初始化為0,visit為整型
        int[] visited = new int[nums.length];
        for (int i = 0; i < visited.length; i++) {
            visited[i] = 0;
        }
        helper(nums, list, results, visited);
        return results;
    }
    
    private void helper(int[] nums,
                        List<Integer> list,
                        List<List<Integer>> results,
                        int[] visited) {
        if (list.size() == nums.length) {
            results.add(new ArrayList<Integer>(list));
            return;
        }

        for (int i = 0; i < nums.length; i++) {
             /* 下面的判斷主要是為了去除重復元素影響丽已。
              * 比如蚌堵,給出一個排好序的數(shù)組,[1,2,2]沛婴,那么第一個2和第二2如果在結果中互換位置吼畏,
              * 我們也認為是同一種方案,所以我們強制要求相同的數(shù)字嘁灯,原來排在前面的泻蚊,在結果
              * 當中也應該排在前面,這樣就保證了唯一性丑婿。所以當前面的2還沒有使用的時候性雄,就
              * 不應該讓后面的2使用。
              */
            // 去除重復元素影響選代表以及訪問過的元素就不要繼續(xù)添加了
            if (visited[i] == 1 || (i != 0 && nums[i - 1] == nums[i] && visited[i - 1] == 0)) {
                continue;
            }
            
            list.add(nums[i]);
            visited[i] = 1;
            helper(nums, list, results, visited);
            list.remove(list.size() - 1);
            visited[i] = 0;
        }
    }
}

本題的去重條件if (visited[i] == 1 || (i != 0 && nums[i - 1] == nums[i] && visited[i - 1] == 0))visited[i] == 1實際上就相當于全排列的判斷條件if (list.contains(nums[i]))枯冈, 而后面的(i != 0 && nums[i - 1] == nums[i] && visited[i - 1] == 0)實際上是在除下列情況:比如數(shù)組 [1, 2, 2] 第一個 2 用 A 表示毅贮,第二個 2 用 B 表示,我們在 [1, A, B] 和 [1, B, A] 兩個相同排序中選取典型的[1, A, B]做代表尘奏,所以當某一次遞歸出現(xiàn) [1, B] 開頭的排序滩褥,下一個遞歸中只有 A 未被添加,但我們通過判斷條件(i != 0 && nums[i - 1] == nums[i] && visited[i - 1] == 0) continue 掉 A

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炫加,一起剝皮案震驚了整個濱河市瑰煎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俗孝,老刑警劉巖酒甸,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赋铝,居然都是意外死亡插勤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門革骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來农尖,“玉大人,你說我怎么就攤上這事良哲∈⒖ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵筑凫,是天一觀的道長滑沧。 經(jīng)常有香客問我并村,道長,這世上最難降的妖魔是什么滓技? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任哩牍,我火速辦了婚禮,結果婚禮上殖属,老公的妹妹穿的比我還像新娘姐叁。我一直安慰自己瓦盛,他們只是感情好洗显,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著原环,像睡著了一般挠唆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘱吗,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天玄组,我揣著相機與錄音,去河邊找鬼谒麦。 笑死俄讹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绕德。 我是一名探鬼主播患膛,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耻蛇!你這毒婦竟也來了踪蹬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤臣咖,失蹤者是張志新(化名)和其女友劉穎跃捣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夺蛇,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡疚漆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刁赦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娶聘。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖截型,靈堂內(nèi)的尸體忽然破棺而出趴荸,到底是詐尸還是另有隱情,我是刑警寧澤宦焦,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布发钝,位于F島的核電站顿涣,受9級特大地震影響,放射性物質發(fā)生泄漏酝豪。R本人自食惡果不足惜涛碑,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孵淘。 院中可真熱鬧蒲障,春花似錦、人聲如沸瘫证。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽背捌。三九已至毙籽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毡庆,已是汗流浹背坑赡。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留么抗,地道東北人毅否。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蝇刀,于是被迫代替她去往敵國和親螟加。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗熊泵。 張土汪:刷leetcod...
    土汪閱讀 12,744評論 0 33
  • Scala的集合類可以從三個維度進行切分: 可變與不可變集合(Immutable and mutable coll...
    時待吾閱讀 5,815評論 0 4
  • 首頁 資訊 文章 資源 小組 相親 登錄 注冊 首頁 最新文章 IT 職場 前端 后端 移動端 數(shù)據(jù)庫 運維 其他...
    Helen_Cat閱讀 3,874評論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理仰迁,服務發(fā)現(xiàn),斷路器顽分,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 下著雨的七月份徐许,帶著一份暗淡的心情。望著窗外下著的小雨滴卒蘸,喝著濃濃奶茶雌隅,洋溢著青春的瞬間,不知過了多久窗外的雨停...
    誰的流年不瘋狂閱讀 122評論 0 1