Permutations 原题地址:
https://oj.leetcode.com/problems/permutations/
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]
.
这里由于涉及到java数组复制只是shadow clone的原因,代码略烦,贴一段比较简单而且有助于解决Permutations II的代码,已AC。
public class Solution {
List<List<Integer>> list = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] num) {
if (num == null || num.length == 0)
return list;
boolean[] check = new boolean[num.length + 1];
LinkedList<Integer> temp = new LinkedList<Integer>();
permutelist(num, check, temp);
return list;
}
private void permutelist(int[] num, boolean[] check, LinkedList<Integer> temp) {
if (temp.size() == num.length) {
LinkedList<Integer> plist = (LinkedList<Integer>) temp.clone();
list.add(plist);
}
for (int i = 0; i < num.length; i++) {
if (!check[i]) {
temp.add(num[i]);
check[i] = true;
permutelist(num, check, temp);
check[i] = false;
temp.pollLast();
}
}
}
}public class Solution {
List<List<Integer>> list = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] num) {
if (num == null || num.length == 0)
return list;
boolean[] check = new boolean[num.length + 1];
LinkedList<Integer> temp = new LinkedList<Integer>();
permutelist(num, check, temp);
return list;
}
private void permutelist(int[] num, boolean[] check, LinkedList<Integer> temp) {
if (temp.size() == num.length) {
LinkedList<Integer> plist = (LinkedList<Integer>) temp.clone();
list.add(plist);
}
for (int i = 0; i < num.length; i++) {
if (!check[i]) {
temp.add(num[i]);
check[i] = true;
permutelist(num, check, temp);
check[i] = false;
temp.pollLast();
}
}
}
}