设置一个结果集和路径path
本题不设置used而是再当前层设置一个map
递归三部曲:
参数和返回值:参数为输入数组nums,开始下标startindex,返回值为空
对path>1时的path输入结果集//放到这里是因为要收集所有子节点
结束条件:当startIndex>nums.length时结束。
单层递归逻辑:
for循环(i=startindex;i
节点是否再map中出现过,是就continue//出现过说明要进行数层去重
将节点输入map
将节点输入path
递归(nums,i+1)
回溯:当前节点弹出
class Solution {List> result = new ArrayList<>();//结果集LinkedList path = new LinkedList<>();//当前路径public List> findSubsequences(int[] nums) {//主函数ascziji(nums,0);//调用递归函数return result;}public void ascziji(int[] nums,int startIndex){//递归函数if(path.size()>1){//输出到结果集result.add(new ArrayList(path));}//结束条件隐藏,因为startindex>nums.length时for循环也不会进入HashMap map = new HashMap<>();//定义一个map保证树层无重复for(int i=startIndex;i0) continue;//树层去重map.put(nums[i],map.getOrDefault(nums[i],0)+1);//节点输入mappath.add(nums[i]);//节点输入路径ascziji(nums,i+1);//递归下一层path.removeLast();回溯,弹出当前节点}}
}