[Leetcode78]子集

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

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

这道题一开始用比较暴力的解法去解提交后运行的效率特别低,后来参考了别人的思路改进了一下效果杠杠的。

python:

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        for i in range(len(nums)):
            res.append([nums[i]])
        flag = 1
        while flag < len(nums):
            for i in range(len(res)):
                for j in range(len(nums)):
                    temp = list(res[i])
                    if j > nums.index(temp[-1]):
                        temp.append(nums[j])
                        if temp not in res:
                            res.append(temp)
            flag += 1
        res.append([])
        return res
    

python(改进): 

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        res = [[]]
        
        for num in nums:
            n = len(res)
            for i in range(n):
                res.append(list(res[i]))
                res[-1].append(num)
        return res

C++: 

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> res;
        vector<int> None;
        res.push_back(None);
        for(int i = 0;i < nums.size();i++){
            int num = nums[i];
            int n = res.size();
            for(int j = 0;j < n;j++){
                vector<int> temp = res[j];
                temp.push_back(num);
                res.push_back(temp);
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_40501689/article/details/83047589