给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
代码一:
先添加特殊的;
后遍历组合:效率低
def subsets(nums):
if not nums:return [[]];
leg=len(nums);
res=[[],nums];
if leg==1:
return res;
for i in nums:res.append([i]);
def run(re,j,s):
if j==0:
res.append(re+[]);
else:
for i in range(s,leg):
lp=nums[i]
re.append(lp);
run(re,j-1,i+1);
re.pop();
if leg>2:
for i in range(2,leg):
run([],i,0);
return res;
代码二:
def subsets(nums):
res=[[]];
for i in nums[::-1]:
#代码段一: res可以加[:] 也可以不加
res=res+[[i]+k for k in res[:]];
#代码段二:
# 对以下代码的解释:
#注意代码中res[:]是必须的,不然的话会反复循环
#因为切片是引用新的对象,
# 此时在循环中res[:]是不更新的,而res是不断有元素push进去的,很trick
# for j in res[:]:
# res.append(j+[i]);
return res;
nums = [1,2,3]
print(subsets(nums));
[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]