题目1:【二刷完成】
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public List<List<Integer>> findSubsequences(int[] nums) {
backtracking(nums,0);
return result;
}
public void backtracking(int[] nums, int startIndex){
if (path.size()>=2){
result.add(new ArrayList<>(path));
}
HashSet<Integer> hs = new HashSet<>();//为了去重
for (int i=startIndex; i<nums.length;i++){
if (!path.isEmpty() && path.get(path.size()-1)>nums[i] || hs.contains(nums[i])){
continue;
}
hs.add(nums[i]);
path.add(nums[i]);
backtracking(nums,i+1);
path.remove(path.size()-1);
}
}
}
题目2:【二刷完成】
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
boolean[] used;
public List<List<Integer>> permute(int[] nums) {
used = new boolean[nums.length];
backtracking(nums);
return result;
}
public void backtracking(int[] nums){
if (path.size()==nums.length){
result.add(new ArrayList<>(path));
return;
}
for (int i=0; i<nums.length; i++){
if (used[i]){
continue;
}
used[i] = true;
path.add(nums[i]);
backtracking(nums);
path.remove(path.size()-1);
used[i] = false;
}
}
}
题目3:【二刷完成】
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
boolean[] used;
public List<List<Integer>> permuteUnique(int[] nums) {
used = new boolean[nums.length];
backtracking(nums);
return result;
}
public void backtracking(int[] nums){
if (path.size()==nums.length){
result.add(new ArrayList<>(path));
}
HashSet<Integer> hs = new HashSet<>();
for (int i=0; i<nums.length; i++){
if (hs.contains(nums[i]) || used[i]){
continue;
}
hs.add(nums[i]);
used[i] = true;
path.add(nums[i]);
backtracking(nums);
path.remove(path.size()-1);
used[i] = false;
}
}
}