[LeetCode 46 & 47] Permutations I & II

3064 ワード

タイトルリンク:permutations
類似問題:
1.  [LeetCode 39&40] Combination Sum I & II
2. [LeetCode 78] Subsets
3.  [LeetCode 90] Subsets II
4. [LeetCode 22] Generate Parentheses
5.  [LeetCode 77] Combinations
import java.util.ArrayList;
import java.util.List;

/**
 * 
		Given a collection of numbers, return all possible permutations.
		
		For example,
		[1,2,3] have the following permutations:
		[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
 *
 */

public class Permutations {
	
//	25 / 25 test cases passed.
//	Status: Accepted
//	Runtime: 244 ms
//	Submitted: 0 minutes ago

	//     O(n!)      O(n)
	public List> permutations = new ArrayList>();
	public List> permute(int[] num) {
        List nums = new ArrayList();
        for (Integer i : num) {
			nums.add(i);
		}
    	permute(nums, new ArrayList());
    	return permutations;    	
    }
	public void permute(List nums, List permutation) {
    	if(nums.size() == 0) {
    		permutations.add(permutation);
    		return;
    	}
    	for (int i = 0; i < nums.size(); i++) {
			List list1 = new ArrayList(nums);
			List list2 = new ArrayList(permutation);
			list2.add(nums.get(i));
			list1.remove(i);
			permute(list1, list2);			
		}    	
    }

	public static void main(String[] args) {

	}

}

タイトルリンク:permutations-ii
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 
		Given a collection of numbers that might contain duplicates, return all possible unique permutations.
		
		For example,
		[1,1,2] have the following unique permutations:
		[1,1,2], [1,2,1], and [2,1,1].
 *
 */

public class PermutationsII {
	
	
//	30 / 30 test cases passed.
//	Status: Accepted
//	Runtime: 301 ms
//	Submitted: 0 minutes ago

	//     O(n!)      O(n)
	public List> permutations = new ArrayList>();
	public List> permuteUnique(int[] num) {
        List nums = new ArrayList();
        Arrays.sort(num);
        for (Integer i : num) {
			nums.add(i);
		}
        permuteUnique(nums, new ArrayList());
    	return permutations;    	
    }
	public void permuteUnique(List nums, List permutation) {
    	if(nums.size() == 0) {
    		permutations.add(permutation);
    		return;
    	}
    	int pre = Integer.MAX_VALUE;
    	for (int i = 0; i < nums.size(); i++) {
    		if(nums.get(i) == pre) {
    			continue;
    		}
			List list1 = new ArrayList(nums);
			List list2 = new ArrayList(permutation);
			list2.add(nums.get(i));
			pre = list1.remove(i);
			permuteUnique(list1, list2);			
		}    	
    }  
	
	public static void main(String[] args) {

	}

}