以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]