17. 子集

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xwdrhgr/article/details/102778466

17. 子集

给定一个含不同整数的集合,返回其所有的子集。

样例

样例 1:

输入:[0]

输出:

[

[],

[0]

]

样例 2:

输入:[1,2,3]

输出:

[

[3],

[1],

[2],

[1,2,3],

[1,3],

[2,3],

[1,2],

[]

]

挑战

你可以同时用递归与非递归的方式解决么?

注意事项

子集中的元素排列必须是非降序的,解集必须不包含重复的子集。

public class Solution {

    /**

     * @param nums: A set of numbers

     * @return: A list of lists

     */

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

        // write your code here

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

        if(nums==null ){

            return res;

        }

        res.add(new ArrayList<>());

        Arrays.sort(nums);

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

            for(int j=0;j<Math.pow(2,i);j++){//每一层的个数都是2的n次方

                ArrayList<Integer>temp2=new ArrayList<Integer>(res.get(j));

                temp2.add(temp2.size(),nums[i]);

                res.add(temp2);//加入一个数,放进去

            }

        }

        return res;

    }

}

 ------------------------------------------------------------------------------------------------------------

思路, 遍历数组里面所有的元素,每次取出第一个list,往里面加入,或者不加入

   for(int j=0;j<Math.pow(2,i);j++){//每一层的个数都是2的n次方,看图,每多一个元素,都是多一次平方

猜你喜欢

转载自blog.csdn.net/xwdrhgr/article/details/102778466
今日推荐