zoukankan      html  css  js  c++  java
  • 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

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    禁止网页右键、复制、另存为方法
    js循环99乘法口诀
    js点击判断显示或隐藏-21
    js下拉框-5
    js下拉框-4
    纯css下拉
    asp.net core 关于同步等待异步坑及解决办法
    net core http请求响应中间件 及全局异常中间件小计
    生产环境 前后端分离部署 https 跨域cors netcore3.1 部署小计
    csrediscore实现分布式锁 小计
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13402925.html
Copyright © 2011-2022 走看看