• 90. Subsets II


    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

    Note: The solution set must not contain duplicate subsets.

    Example:

    Input: [1,2,2]
    Output:
    [
    [2],
    [1],
    [1,2,2],
    [2,2],
    [1,2],
    []
    ]

    加个continue就行了。

    continue和break的区别:break结束双循环的外面一层,continue只结束里面一层

    尝试用自然语言描述一下:
    这个元素和之前i - 1的重复,就跳过这个元素。
    i++,到了数组中的下一个元素,就没有之前的i - 1了,而是新的i - 1
    所以可以保证不重复

    从case理解:1122333
    i = 5 递归是往深了走,所以一下到后面去了。作为一个经常重复的i被踢了,还是那句话:T的是i
    nums[i] = 3
    这时候要跳过 
      
    i = 4 后面就在recursive的过程中不断踢人。
    nums[i] = 3 
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 4
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 2
    nums[i] = 2
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 4
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 4
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 4
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 2
    nums[i] = 2
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
      
    i = 4
    nums[i] = 3
    这时候要跳过
      
    i = 5
    nums[i] = 3
    这时候要跳过
    class Solution {
        public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> list = new ArrayList<>();
        Arrays.sort(nums);
        backtrack(list, new ArrayList<>(), nums, 0);
        return list;
    }
    
    private void backtrack(List<List<Integer>> list, List<Integer> tempList, int [] nums, int start){
        list.add(new ArrayList<>(tempList));
        for(int i = start; i < nums.length; i++){
            
            if (i > start && (nums[i] == nums[i - 1])) {
                continue;
            }
            
            tempList.add(nums[i]);
            backtrack(list, tempList, nums, i + 1);
            tempList.remove(tempList.size() - 1);
        }
    } 
    }
    View Code
  • 相关阅读:
    配置cinder使用NFS后端
    配置glance使用NFS后端
    制作windows镜像
    fuel健康检查Heat失败的原因
    重启OpenStack服务步骤
    改变nova-compute默认位置的方法
    改变cinder默认vg的方法
    centos lvm常用命令
    【一天一个canvas】图像处理教程(十二)
    【一天一个canvas】阴影效果呈现方法(十一)
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13205699.html
Copyright © 2020-2023  润新知