以5位二进制为例
def getNumberSet(i):
bitNums = [1,2,4,8,16]
#选定目标值
flag = bitNums[i]
#从数组中删除目标值
del bitNums[i]
# 目标值与数组中的每个求和
numSet = []
# 其他位都是0
numSet.append(flag)
for a in getArraySubSet(bitNums):
if len(a) == 0:
continue
numSet.append(sum(a)+flag)
return numSet
# 计算一个数组的所有子数组
def getArraySubSet(arr):
result = [[]]
for i in range(len(arr)):
for j in range(len(result)):
result.append(result[j]+[arr[i]])
return result
结果如下:
getNumberSet(0)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]
getNumberSet(1)
[2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31]
getNumberSet(2)
[4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31]
getNumberSet(3)
[8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31]
getNumberSet(4)
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]










