• leetcode——78.子集


    递归

    public List<List<Integer>> subsets(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> result = new ArrayList<>();
            List<Integer> path = new ArrayList<>();
            subsets(nums,path,0,result);
            return result;
        }
    
        private void subsets(int[] nums, List<Integer> path, int step, List<List<Integer>> result) {
            if(step == nums.length) {
                result.add(new ArrayList<>(path));
                return;
            }
            subsets(nums,path,step+1,result);
            path.add(nums[step]);
            subsets(nums,path,step+1,result);
            path.remove(path.size()-1);
        }

     位向量法

    public List<List<Integer>> subsets(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> result = new ArrayList<>();
            boolean[] selected = new boolean[nums.length];
            subsets(nums,selected,0,result);
            return result;
        }
    
        private void subsets(int[] nums, boolean[] selected, int step, List<List<Integer>> result) {
            if(step == nums.length){
                List<Integer> subset = new ArrayList<>();
                for(int i = 0;i<nums.length;i++){
                    if(selected[i]){
                        subset.add(nums[i]);
                    }
                }
                result.add(new ArrayList<>(subset));
                return;
            }
            selected[step] = false;
            subsets(nums,selected,step+1,result);
            selected[step] = true;
            subsets(nums,selected,step+1,result);
        }

    二进制法

    public List<List<Integer>> subsets(int[] nums) {
            List<List<Integer>> output = new ArrayList<>();
            int n = nums.length;
    
            for (int i = 1<<n; i < 1<<(n+1); ++i) {
                // generate bitmask, from 0..00 to 1..11
                String bitmask = Integer.toBinaryString(i).substring(1);
    
                // append subset corresponding to that bitmask
                List<Integer> curr = new ArrayList<>();
                for (int j = 0; j < n; ++j) {
                    if (bitmask.charAt(j) == '1') curr.add(nums[j]);
                }
                output.add(curr);
            }
            return output;
        }

     ——2020.7.30

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    WinForm常用代码
    XML编程与应用-读取XML
    基础SQL语句
    WPF基础——继承
    wpf控件
    手机网页支付
    Application_Start 多次启动问题
    更改Outlook 2013中Exchange数据文件存放路径
    MySql双机热备份
    图片轮播(Jquery)
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13402925.html
Copyright © 2020-2023  润新知