给定一组不含重复元素的整数数组 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;
}
};