public List<List<Integer>> permute(int[] nums) {
//准备好结果集
List<List<Integer>> result = new LinkedList<>();
//递归交换
backcheck(nums,0,result);
//返回结果集
return result;
}
public void backcheck(int[] nums,int index,List<List<Integer>> result){
//递归的退出条件
if(index == nums.length){
//此时的nums已经是结果
LinkedList<Integer> item = new LinkedList<>();
for(int i : nums){
item.add(i);
}
result.add(item);
}else{
//第i个选择的位置有,length - i + 1种选择
for(int i = index;i < nums.length;i++){
//交换i,j的位置表示不同的组合
swap(nums,index,i);
//相当于当前位置已经确定
backcheck(nums,index + 1,result);
//需要换回来接着下一个确定本元素的下一个可能性
swap(nums,index,i);
}
}
}
public void swap(int[] nums,int i,int j){
if(i != j){
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
}
}
无重复元素的排列java实现
最新推荐文章于 2022-05-21 01:41:49 发布