Leetcode 491.递增子序列(回溯) 记录反思
作者:互联网
这题属于回溯题里面的树层去重的问题.前面的子集II
它属于树枝去重和这题去重方法不一样.
树层去重需要多加一个use数组来记录当前什么元素已经被使用过了,思想类似于 数组哈希表,创建一个数组,如果这个元素已经出现过了,那么就就当数组当前下标位置的元素置为1 ,之后的所有元素在递归前都要判断自己是否已经递归过了
class Solution {
private List<Integer> path = new ArrayList<>();
private List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> findSubsequences(int[] nums) {
backtracking(nums,0);
return res;
}
private void backtracking (int[] nums, int start) {
if (path.size() > 1) {
res.add(new ArrayList<>(path));
}
int[] use = new int[201];
for (int i = start; i < nums.length; i++) {
if (!path.isEmpty() && nums[i] < path.get(path.size() - 1) || (use[nums[i] + 100] == 1))
continue;
use[nums[i] + 100] = 1;
path.add(nums[i]);
backtracking(nums, i + 1);
path.remove(path.size() - 1);
}
}
}
标签:use,nums,int,new,Leetcode,private,回溯,path,491 来源: https://blog.csdn.net/weixin_45935610/article/details/123611745