终止条件那里,不用return
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
backtracking(res, list, nums, 0);
return res;
}
private void backtracking(List<List<Integer>> res, List<Integer> list, int[] nums, int idx) {
if (list.size() >= 2) {
res.add(new ArrayList<>(list));
}
Set<Integer> set = new HashSet<>();
for (int i = idx; i < nums.length; i++) {
if (!list.isEmpty() && list.get(list.size() - 1) > nums[i] || set.contains(nums[i])) continue;
set.add(nums[i]);
list.add(nums[i]);
backtracking(res, list, nums, i + 1);
list.remove(list.size() - 1);
}
}
}
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
backtracking(res, list, nums);
return res;
}
private void backtracking(List<List<Integer>> res, List<Integer> list, int[] nums) {
if (list.size() == nums.length) {
res.add(new ArrayList<>(list));
return;
}
for (int i = 0; i < nums.length; i++) {
if (list.contains(nums[i])) continue;
list.add(nums[i]);
backtracking(res, list, nums);
list.remove(list.size() - 1);
}
}
}
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
Arrays.sort(nums);
boolean[] visited = new boolean[nums.length];
backtracking(res, list, nums, visited);
return res;
}
private void backtracking(List<List<Integer>> res, List<Integer> list, int[] nums, boolean[] visited) {
if (list.size() == nums.length) {
res.add(new ArrayList<>(list));
return;
}
for (int i = 0; i < nums.length; i++) {
if (visited[i]) continue;
if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) continue;
visited[i] = true;
list.add(nums[i]);
backtracking(res, list, nums, visited);
list.remove(list.size() - 1);
visited[i] = false;
}
}
}