OPEN17的个人小站
源自灵神的分享: https://leetcode.cn/circle/discuss/CaOJ45/
我们用二进制表示一个集合,1存在0不存在, 例如:
集合A{0,2,3}即'1101', 可以用数字13表示
集合B{1,2}即'110', 可以用6表示
a=13;b=6;
bin(a)[2:]
'1101'
bin(b)[2:]
'110'
a&b
4
bin(a&b)[2:]
'100'
a|b
15
bin(a|v)[2:]
'1111'
a&~b
...
n=5
(1<<(n+1))-1
(s >> i) & 1
s | (1 << i)
s&~(1 << i)
s&(s-1)
s.bit_count()
s.bit_length()
(s&-s).bit_length()-1
for i in range(n):
if (s >> i) & 1:
pass
for s in range(1 << n):
pass
sub = s
while sub:
# 处理 sub 的逻辑
sub = (sub - 1) & s
sub = s
while True:
# 处理 sub 的逻辑
sub = (sub - 1) & s
if sub == s:
break
源自灵神的分享: https://leetcode.cn/circle/discuss/CaOJ45/
我们用二进制表示一个集合,1存在0不存在, 例如:
集合A{0,2,3}即'1101', 可以用数字13表示
集合B{1,2}即'110', 可以用6表示
a=13;b=6;
bin(a)[2:]
'1101'
bin(b)[2:]
'110'
a&b
4
bin(a&b)[2:]
'100'
a|b
15
bin(a|v)[2:]
'1111'
a&~b
...
n=5
(1<<(n+1))-1
(s >> i) & 1
s | (1 << i)
s&~(1 << i)
s&(s-1)
s.bit_count()
s.bit_length()
(s&-s).bit_length()-1
for i in range(n):
if (s >> i) & 1:
pass
for s in range(1 << n):
pass
sub = s
while sub:
# 处理 sub 的逻辑
sub = (sub - 1) & s
sub = s
while True:
# 处理 sub 的逻辑
sub = (sub - 1) & s
if sub == s:
break