LeetCode | Permutations II
2014-03-27 19:16
369 查看
题目
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
分析
有重复数字的全排列也是所有数字轮流排第一,剩余再全排列,需要注意相同数字只有一次机会排到第一。
代码
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class PermutationsII {
private ArrayList<ArrayList<Integer>> result;
private int N;
private ArrayList<Integer> list;
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
result = new ArrayList<ArrayList<Integer>>();
N = num.length;
list = new ArrayList<Integer>();
for (int i = 0; i < N; ++i) {
list.add(num[i]);
}
solve(0);
return result;
}
private void solve(int k) {
if (k >= N) {
result.add(new ArrayList<Integer>(list));
return;
}
Set<Integer> set = new HashSet<Integer>();
for (int i = k; i < N; ++i) {
int value = list.get(i);
if (!set.contains(value)) {
swap(i, k);
solve(k + 1);
swap(i, k);
set.add(value);
}
}
}
private void swap(int i, int j) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
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].
分析
有重复数字的全排列也是所有数字轮流排第一,剩余再全排列,需要注意相同数字只有一次机会排到第一。
代码
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class PermutationsII {
private ArrayList<ArrayList<Integer>> result;
private int N;
private ArrayList<Integer> list;
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
result = new ArrayList<ArrayList<Integer>>();
N = num.length;
list = new ArrayList<Integer>();
for (int i = 0; i < N; ++i) {
list.add(num[i]);
}
solve(0);
return result;
}
private void solve(int k) {
if (k >= N) {
result.add(new ArrayList<Integer>(list));
return;
}
Set<Integer> set = new HashSet<Integer>();
for (int i = k; i < N; ++i) {
int value = list.get(i);
if (!set.contains(value)) {
swap(i, k);
solve(k + 1);
swap(i, k);
set.add(value);
}
}
}
private void swap(int i, int j) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
相关文章推荐
- leetcode总结:permutations, permutations II, next permutation, permutation sequence
- LeetCode 47 Permutations II(全排列)
- LeetCode 106 Permutations II
- leetcode - 47. Permutations II(全排列)
- [LeetCode]Permutations II
- [LeetCode] Permutations II 解题报告
- LeetCode 46 Permutations II
- 【LeetCode】Permutations II
- leetcode: Permutations II
- Leetcode 47 Permutations II
- LeetCode47——Permutations II
- LeetCode 47. Permutations II
- Permutations II - Leetcode
- LeetCode 47.Permutations II
- leetcode 47. Permutations II
- Leetcode 46. Permutations 47. Permutations II
- 【LeetCode-47】Permutations II
- 【LeetCode】Permutations II 解题报告
- LeetCode 47. Permutations II
- <LeetCode OJ> 47. Permutations II