在刷题 805. 数组的均值分割 的过程中 题解 看不懂
# 求nums所有可能子集的和,存储在ls列表中
nums = [1, 2, 3, 4]
ls = []
for i in range(1, 1 << 4): # i范围:1~15,i不包括0,保证了子集不为空,
s = 0
# i==0时,0000,右移0、1、2、3分别为0000、0000、0000、0000
# i==1时,0001,右移0、1、2、3分别为0001、0000、0000、0000
# i==2时,0010,右移0、1、2、3分别为0010、0001、0000、0000
# i==3时,0011,右移0、1、2、3分别为0011、0001、0000、0000
# i==4时,0100,右移0、1、2、3分别为0100、0010、0001、0000
# i==5时,0101,右移0、1、2、3分别为0101、0010、0001、0000
# i==6时,0110,右移0、1、2、3分别为0110、0011、0001、0000
# ……
# i==15时,1111,右移0、1、2、3分别为1111、0111、0011、0001
for j, v in enumerate(nums):
# 用来检查二进制数字i的第j位(从右往左)是否为1。如果为1,则表示选择了对应位置上的元素
# 我的误区:1的二进制(如4位)是0001,而不是1111
if i >> j & 1: # i范围:1~4
s += v # j范围:0~3
ls.append(s)
print(ls)
# [1, 2, 3, 3, 4, 5, 6, 4, 5, 6, 7, 7, 8, 9, 10]
print(len(ls))
# 15