首页 > 其他分享 >Leecode热题100-78.子集

Leecode热题100-78.子集

时间:2024-11-04 19:20:16浏览次数:5  
标签:nums List add next Leecode ans 100 热题 curIndex

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的

子集

(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

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

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

都在注释里,自己看

class Solution {
    /**本题打算使用 */
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> ans = process(nums, 0);
        /**因为我们忽略了空集,而空集是子集之一,这里再加上 */
        ans.add(new ArrayList<>());
        return ans;
    }

    public List<List<Integer>> process(int[] nums, int curIndex) {
        /**定义结果 */
        List<List<Integer>> ans = new ArrayList<>();
        if(curIndex == nums.length) {
            List<Integer> list = new ArrayList<>();
            ans.add(list);
            return ans;
        } 
        /**正常范围内当前位置可以要也可以不要*/
        List<List<Integer>> nexts = process(nums, curIndex+1);
        for(List<Integer> next : nexts) {
            if(next.size() == 0) {
                /**为了避免重复的空集,我这里把0的当前位置不要后面还是空集的直接忽略
                不是0还是正常加空集 */
                if(curIndex != 0) {
                    ans.add(next);
                }
            } else {
                /**后面位置结果不为空的时候,如果当前位置不要,还是可以要的 */
                ans.add(next);
            }
            List<Integer> copy = new ArrayList<>(next);
            copy.add(nums[curIndex]);
            ans.add(copy);
        }
        return ans;
    }
}

标签:nums,List,add,next,Leecode,ans,100,热题,curIndex
From: https://blog.csdn.net/Chang_Yafei/article/details/143491864

相关文章