package com.interview.books.leetcodeoj; import com.interview.utils.ConsoleWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created_By: stefanie * Date: 14-12-22 * Time: 上午10:37 */ public class LOJ46_Permutation { //try to put every element in List and use a boolean[] to avoid duplication //to de dup: check if previous element with same value all used, if not have duplication List<List<Integer>> sols; public List<List<Integer>> permute(int[] num) { sols = new ArrayList(); List<Integer> cur = new ArrayList(); Arrays.sort(num); boolean[] used = new boolean[num.length]; permute(num, cur, used); return sols; } public void permute(int[] num, List<Integer> current, boolean[] used){ if(current.size() == num.length) { sols.add(new ArrayList(current)); return; } for(int i = 0; i < num.length; i++){ if(!used[i]){ current.add(num[i]); used[i] = true; boolean noDup = true; for(int j = i; j > 0 && num[j - 1] == num[j]; j--){ if(used[j - 1] == false) { noDup = false; break; } } if(noDup) permute(num, current, used); current.remove(current.size() - 1); used[i] = false; } } } public static void main(String[] args){ LOJ46_Permutation permutater = new LOJ46_Permutation(); int[] nums = new int[]{1,1,2}; List<List<Integer>> sols = permutater.permute(nums); ConsoleWriter.print(sols); } }