版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36528804/article/details/82917518
整数的二进制中是否有两个连续的1?解释如下:
解释:3转成二进制是11
,6转成二进制是110
,3和6的二进制数中都至少有两个连续的1。而像5和9的二进制分别是:101、1001
,因此,5和9的二进制中没有两个连续的1。
源代码如下,有两种方法(方法二效率更高):
# -*- coding: utf-8 -*-
# !usr/bin/env python
""" 判断整数的二进制是否有连续两个1 """
# 法一
def f1(n):
isone1 = False
isone2 = False
while n > 0:
isone1 = n % 2
if isone1 and isone2:
return True
else:
n = n >> 1
isone2 = isone1
return False
# 法二
def f2(n):
return (n & (n>>1)) > 0
# 测试
L = [1, 2, 3, 4, 5, 6]
result = [3, 6]
if __name__ == '__main__':
assert result == [x for x in L if f1(x)], "方法1不对!"
assert result == [x for x in L if f2(x)], "方法2不对!"
print("ok!")