您的位置:首页 > 其它

数组的子集集合

2018-02-02 12:25 113 查看
这篇文章是寻找数组的所有子集的集合,例如nums=[1,2],子集集合为[[],[1],[2],[1,2]]。这个题目来自于leetcode78. Subsets。

一,动态规划思想:

状态:前面i个数的子集集合res1

状态转移方程:前面i+1个数的子集集合res2 = 前面i个数的子集集合res1 + res1所有项添加第i+1个数的集合cur

代码:

res = [[]]
for num in nums :
for temp in res[:] :
x = temp[:]
x.append(num)
res.append(x)
return res


简写:

res = [[]]
for num in nums:
res += [item+[num] for item in res]
return res


二、位操作:对于数组[1,2,3],可以用一个下标0和1表示是否选择该数字,0表示未选择,1表示选中,那么每一组3个0和1的组合表示一种选择,3位共有8种选择。

res = []
for i in range(1<<len(nums)):# 子集总共有多少个集合
tmp = []
for j in range(len(nums)):# 当前子集集合的生成
if i & 1 << j:  # 当前子集集合包含第j字符的判断
tmp.append(nums[j])
res.append(tmp)
return res
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息