给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
递归的时候需要注意不能添加重复的元素,需要添加判断。还有就是list集合为引用数据类型,需要创建临时集合接收。
代码挺好理解的,有啥问题欢迎提出。
import java.util.ArrayList;
import java.util.List;
//全排列
public class Test {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.permute(new int[]{1,2,3}));
}
}
class Solution {
List<List<Integer>> aList = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
f(nums,nums.length,0);
return aList;
}
//l代表有几个元素, count第几次选择
public void f(int[] nums,int l,int count){
if(l == count){
//list集合为引用数据类型 , 所以需要临时的集合接收一下
List<Integer> list2 = new ArrayList<>(list);
aList.add(list2);
return ;
}
for(int i = 0;i<nums.length;i++){
if(!list.contains(nums[i])){
list.add(nums[i]);
f(nums,l,count+1);
list.remove(list.size()-1);
}
}
}
}