491. 非递减子序列 - 力扣(LeetCode)
class Solution {public List<List<Integer>> findSubsequences(int[] nums) {List<List<Integer>> res = new ArrayList<>();List<Integer> list = new ArrayList<>();dfs(res, list, nums, 0);return res;}private void dfs(List<List<Integer>> res, List<Integer> list, int[] nums, int idx) {if (list.size() >= 2) {res.add(new ArrayList<>(list));}Map<Integer, Integer> map = new HashMap<>();for (int i = idx; i < nums.length; i++) {if (!list.isEmpty() && list.get(list.size() - 1) > nums[i]) continue;if (map.getOrDefault(nums[i], 0) >= 1) continue;map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);list.add(nums[i]);dfs(res, list, nums, i + 1);list.remove(list.size() - 1);}}
}
46. 全排列 - 力扣(LeetCode)
class Solution {public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();List<Integer> list = new ArrayList<>();dfs(res, list, nums);return res;}private void dfs(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]);dfs(res, list, nums);list.remove(list.size() - 1);}}
}
47. 全排列 II - 力扣(LeetCode)
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];dfs(res, list, nums, visited);return res;}private void dfs(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]);dfs(res, list, nums, visited);list.remove(list.size() - 1);visited[i] = false;}}
}