我遇到了一个问题:
给定一个数组A.是否存在数组A的任何子集,如果我们对该子集的所有元素执行AND,那么输出应该是2的幂(例如:1,2,4,8,16等等) on)。
观察后我尝试了这样:
s = list(map(int,raw_input().split()))
x = [ True for x in s if x | (x+1) == (x+1)*2]
if len(x) > 0:
print "YES"
else:
print "NO"
有人会建议除此之外的其他逻辑吗?
答案 0 :(得分:2)
我们将itertools.combinations
使用输入集中的所有元素组合。
from itertools import combinations
def is_power_two(n):
if n==1:
return True
if n<1:
return False
return is_power_two(n/2)
def do_they_and(s):
for i in range(2, len(s)+1):
for j in combinations(s, i):
total = 0
for n in j:
total &= n
if is_power_two(total):
return True
这可能是编程的最简单方法,但从效率的角度来看,最佳解决方案可能是动态编程。