LeetCode47全排列二
昨天沒有寫,今天補上哈。。
題目
給定一個可能包含重複數字的集合,返回所有可能的不同全排列。
例如,[1,1,2]
有以下不同全排列:
[ [1,1,2], [1,2,1], [2,1,1] ]
分析
之前寫的是無重複數字的全排列,這次是有重複數字的,這就需要判斷一下是否要進行交換。在加入判斷時,判斷的範圍要注意,因為一開始沒有搞清楚交換的原理啊,錯了很多次,判斷時需要判斷當前陣列區間中是否存在和正在判斷的數字的重複,也就是判斷begin——i之間(而不是往前遍歷一遍整個陣列0——i,這樣是不對的)。
程式碼
class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> list = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { temp.add(nums[i]); } allArray(list,temp,0,nums.length); return list; } public void allArray(List<List<Integer>> list, List<Integer> temp, int begin, int end) { if (begin == end) list.add(new ArrayList<Integer>(temp)); for (int i = begin; i < temp.size(); ++i) { if (isSame(temp, begin, i)) { swap(temp, begin, i); allArray(list, temp, begin + 1, end); swap(temp, begin, i); } } } public boolean isSame(List<Integer> temp, int begin, int end){ for (int i = begin; i < end; i++) if (temp.get(i) == temp.get(end)) return false; return true; } public void swap(List<Integer>list, int x, int y){ int temp = list.get(x); list.set(x,list.get(y)); list.set(y,temp); } }
相關推薦
LeetCode47全排列二
昨天沒有寫,今天補上哈。。題目給定一個可能包含重複數字的集合,返回所有可能的不同全排列。例如,[1,1,2] 有以下不同全排列:[ [1,1,2], [1,2,1], [2,1,1] ] 分析之前寫的是無重複數字的全排列,這次是有重複數字的,這就需要判斷一下是否要
LeetCode47. 全排列 II
題目大意:給定一個含有重複元素的序列,返回這個序列所有不重複的全排列題目分析:與最基本的全排列遞迴演算法相比,本題要對重複的元素進行特別的處理。例如序列“112”,第一個1和第二個1就不需要交換了,因為交換前後排列的序列是重複的。例如序列“211”,當“2”與第一個“1”交換
十二:全排列-求解密碼
英文 計算 har tdi font scanf 需要 tr1 顯示 問題:全排列-求解密碼題目描述有某個系統需要密碼才可以進入,現已知密碼中的字符組合為字符串s中的字符(s<=6,s中的每一個字符都是英文字母,沒有數字),但不知其排列順序,請你編寫程序,顯示出該字符
劍指offer(二):字串的全排列 字串 C語言
題目:實現字串的全排列 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 思路: 1.先求出所有可以出現在第一個位置的字元 2.固定第一個
程式設計師程式設計藝術-----第十五 ~ 二十章-----全排列、跳臺階、奇偶、第一個出現一次字元、一致性hash
第十六~第二十章:全排列,跳臺階,奇偶排序,第一個只出現一次等問題作者:July、2011.10.16。出處:http://blog.csdn.net/v_JULY_v。引言 最近這幾天閒職在家,一忙著投簡歷,二為準備面試而蒐集整理各種面試題。故常常關注個人所建的Algorithms1-14群內朋友關於
[LeetCode] Palindrome Permutation II 迴文全排列之二
Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empty list if no palindromic permutation could be form.
[LeetCode] Permutations II 全排列之二
Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example,[1,1,2] have the following unique perm
遞歸回溯問題的四道經典題:N皇后,組合,全排列,二叉樹路徑和
組合和排列問題的實質是對N叉樹的遍歷,只是退出條件不同。 1.組合 描述:給出兩個整數n和k,返回從1……n中選出的k個數的組合。 樣例: 例如 n = 4 且 k = 2 返回的解為: [[2,4],[3,4],[2,3],[1,2],[1,3
2017.5.3 4.全排列
col font ace urn color span 順序輸出 所有 一個 題目描述 給定N(N<10),按照字典序輸出所有的N排列。 輸入 第一行輸入N。 樣例輸入 3 輸出 輸出1到N的全排列,一行一個排列,按照字典序順序輸出。
遞歸解決全排列問題
n) for include brush har class log list names #include <bits/stdc++.h> using namespace std; void Perm(char list[],int index,int le
CF459C Pashmak and Buses 打印全排列
div pre ota stdlib.h tmp 公交車 能夠 fde int 這題假設將終於的結果豎著看,每一列構成的數能夠看成是k進制的數。一共同擁有d列,隨意兩列都不同樣,所以這就是一個d位k進制數全排列的問題,一共同擁有k ^ d個排列。假設k
[51nod1384]全排列
scanf namespace pre strlen next typedef 尾指針 末尾 char 法一:next_permutation函數,兩個參數分別為起始指針和末尾指針。 1 #include<bits/stdc++.h> 2 using
全排列(洛谷1061 Jam的計數法or NOIP 2006 普及組 第三題)
div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按
python 全排列
pop int end 相關 dsm track [] i+1 urn itertools模塊現成的全排列: for i in itertools.permutations(‘abcd‘,4): print ‘‘.join(i) 相關全排列算法: def p
遞歸--練習7--noi1750全排列
時間 iostream 而且 sin content sort ble ret param 遞歸--練習7--noi1750全排列 一、心得 二、題目 1750:全排列 總時間限制: 1000ms 內存限制: 65536kB描述 給定一個由不同的小寫字母組成的字符串
n個整數全排列的遞歸實現(C++)
code clas 全排列 pop data turn ack popu perm 全排列是很經常使用的一個小算法,以下是n個整數全排列的遞歸實現,使用的是C++ #include <iostream> using namespace std; in
nyoj32(全排列)
while -s 意思 ring strong style 之間 個推 是否 題目意思: http://acm.nyist.net/JudgeOnline/problem.php?pid=32 找出從自然數1、2、... 、n(0<n<10)中任取r(0&
next_permutation( ) 和prev_permutation( ) 全排列函數
algo clu start prev 都是 它的 ati end 排列組合 頭文件#include <algorithm> 兩者都是用來計算排列組合的函數。前者是求出下一個排列組合,而後者是求出上一個排列組合。 所謂“下一個”和“上一個”,有一個例子; 對序列
9.全排列
可能 bsp 復數 image src while sort wap vector 題目: 給定一個數字列表,返回其所有可能的排列。 註意事項 你可以假設沒有重復數字。 class Solution {public: /** * @param n
溫習全排列
個數字 append lin urn data- esp int continue javascrip 全排列 題目: 找出從自然數1,2,…… n中任取r個數的組合。比如n=5,r=3。 可用這種遞歸思想來考慮組合函數的算法,設子程序[計算分組子