P1.1 BinaryGap
Find longest sequence of zeros in binary representation of an integer.
在整数的二进制表示中查找最长的零序列
正整数N的二进制间隙就是在N的二进制表示中,由两端的1包围的连续的零的序列。
例如:
数字9的二进制表示为1001,其包含长度为2的二进制间隙;
数字529的二进制表示1000010001,其包含两个二进制间隙:
长度分别是3和4;数字20的二进制为10100,其包含1个长度为1的二进制间隙;
数字15具有二进制表示1111,不存在二进制间隙;
数字32具有二进制表示100000,也不存在并二进制间隙。
写一个函数:
def solution(N)
例如:
给定N = 1041,函数应返回5,因为N具有二进制表示10000010001,因此其最长二进制间隙的长度为5;
给定N = 32,函数应返回0,因为N具有二进制表示100000,不存在二进制间隙。
假定:
- N是[1,2,……, 2,147,483,647]中的整数;
- 解题思路
利用迭代将十进制正整数转为二进制表示;
- Python3代码
# -*- coding:utf-8 -*-
# &Author AnFany
# Lesson 1:Iterations
# P 1.1 BinaryGap
def decimal_to_binary(N):
"""
将十进制的正整数转为二进制表示
:param N: 十进制的正整数
:return: 二进制表示的字符串
"""
binary = ''
while N != 0:
binary += str(N % 2)
N = int(N / 2)
return binary[::-1]
def solution(N):
"""
在整数的二进制表示中查找最长的零序列
:param N:1至2,147,483,647的整数
:return: 最长的零序列的长度
"""
binary_list = list(decimal_to_binary(N))
if '0' not in binary_list:
return 0
elif binary_list.count('1') == 1:
return 0
else:
first_1 = 0 # 前面1的位置
max_length = 0 # 间隔长度
for index, value in enumerate(binary_list):
if value == '1':
max_length = max(max_length, index-first_1-1)
first_1 = index
return max_length
- 结果
点击获得更多编程练习题。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。