class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> findSubsequences(int[] nums) {
List<Integer> list = new ArrayList<>();
backTracking(nums,list,0);
return lists;
}
public void backTracking(int[] nums,List<Integer> list,int start){
if(list.size() >= 2){
lists.add(new ArrayList<>(list));
}
Set<Integer> set = new HashSet<>();
for(int i = start;i<nums.length;i++){
if(set.contains(nums[i])){
continue;
}
if(list.size()==0 || list.get(list.size()-1) <= nums[i]){
list.add(nums[i]);
}else continue;
set.add(nums[i]);
backTracking(nums,list,i+1);
if(list.size()!=0)
list.remove(list.size()-1);
}
}
}
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
List<Integer> list = new ArrayList<>();
boolean[] temp = new boolean[nums.length];
backTracking(list,nums,temp);
return lists;
}
public void backTracking(List<Integer> list,int[] nums,boolean[] temp){
if(list.size() == nums.length){
lists.add(new ArrayList<>(list));
return;
}
for(int i = 0;i<nums.length;i++){
if(temp[i] == false){
list.add(nums[i]);
temp[i] = true;
}else{
continue;
}
backTracking(list,nums,temp);
list.remove(list.size()-1);
temp[i] = false;
}
}
}
47.全排列 II
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
List<Integer> list = new ArrayList<>();
Arrays.sort(nums);
boolean[] temp = new boolean[nums.length];
backTracking(nums,0,list,temp);
return lists;
}
public void backTracking(int[] nums,int start,List<Integer> list,boolean[] temp){
if(list.size() == nums.length){
lists.add(new ArrayList<>(list));
return;
}
for(int i = 0;i<nums.length;i++){
if(i !=start && i!=0 && nums[i] == nums[i-1] && temp[i-1] == false)
continue;
if(temp[i] == true)
continue;
list.add(nums[i]);
temp[i] = true;
backTracking(nums,i+1,list,temp);
list.remove(list.size()-1);
temp[i] = false;
}
}
}