题目描述:
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
没整出来
有点难度
import java.util.ArrayList;
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
permute(nums,0);
return lists;
}
private void permute(int [] nums,int start){
if(start>=nums.length){
List<Integer> list = array2list(nums);
lists.add(list);
}
for(int i = start;i<nums.length;i++){
swap(nums,start,i);
permute(nums,start+1);
swap(nums,start,i);
}
}
private void swap(int [] nums,int i,int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
private List<Integer> array2list(int[] array){
List<Integer> list = new ArrayList<>();
for(int i = 0; i < array.length;i++){
list.add(array[i]);
}
return list;
}
}
2019年3月15日20:18:25
重新尝试,使用递归写出来了
写到全排列II看到这道题目,虽然效率不是很高,但是做出来了,不错
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Set<Integer> tem = new LinkedHashSet<>();
permutein(nums, tem, result);
return result;
}
public void permutein(int nums[],Set<Integer> tem ,List<List<Integer>> result){
if(tem.size() == nums.length){
List<Integer> sList = new ArrayList<>();
for (int integer : tem) {
sList.add(integer);
}
result.add(sList);
return ;
}
for (int i = 0; i < nums.length; i++) {
int size1 = tem.size();
tem.add(nums[i]);
if(size1 < tem.size()){
permutein(nums, tem, result);
tem.remove(nums[i]);
}
}
}
}