子集回溯

题目描述:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]

输出:

[

  [3],

  [1],

  [2],

  [1,2,3],

  [1,3],

  [2,3],

  [1,2],

  []

]

代码

回溯法:

class Solution {

    private List<List<Integer>> res;

    private void find(int[] nums, int begin, List<Integer> pre) {

        // 没有显式的递归终止

        res.add(new ArrayList<>(pre));// 注意:Java 的引用传递机制,这里要 new 一下

        for (int i = begin; i < nums.length; i++) {

            pre.add(nums[i]);

            find(nums, i + 1, pre);

            pre.remove(pre.size() - 1);// 组合问题,状态在递归完成后要重置

        }

    }

    public List<List<Integer>> subsets(int[] nums) {

        int len = nums.length;

        res = new ArrayList<>();

        if (len == 0) {

            return res;

        }

        List<Integer> pre = new ArrayList<>();

        find(nums, 0, pre);

        return res;

    }

}

位掩码:

public class Solution5 {

    public List<List<Integer>> subsets(int[] nums) {

        int size = nums.length;

        int n = 1 << size;

        List<List<Integer>> res = new ArrayList<>();

        for (int i = 0; i < n; i++) {

            List<Integer> cur = new ArrayList<>();

            for (int j = 0; j < size; j++) {

                if (((i >> j) & 1) == 1) {

                    cur.add(nums[j]);

                }

            }

            res.add(cur);

        }

        return res;

    }

}

作者:liweiwei1419

链接:https://leetcode-cn.com/problems/subsets/solution/hui-su-python-dai-ma-by-liweiwei1419/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容