版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kobe_academy/article/details/88093474
题目描述:
给定一个正整数 N
,找到并返回 N
的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回 0
。
示例 1:
输入:22
输出:2
解释:
22 的二进制是 0b10110 。
在 22 的二进制表示中,有三个 1,组成两对连续的 1 。
第一对连续的 1 中,两个 1 之间的距离为 2 。
第二对连续的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。
示例 2:
输入:5
输出:2
解释:
5 的二进制是 0b101 。
示例 3:
输入:6
输出:1
解释:
6 的二进制是 0b110 。
示例 4:
输入:8
输出:0
解释:
8 的二进制是 0b1000 。
在 8 的二进制表示中没有连续的 1,所以返回 0
解题思路:
先根据给定的十进制数得到对应二进制数的字符串,然后对二进制字符串进行处理
代码实现:
def binaryGap(self, N: int) -> int:
s = ''
max = 0 # 记录最大间距
count = 0 # 存储临时间距
temp = False # 用于确定是否可以开始计数
while N > 1 :
s += str(N % 2)
N = int(N/2)
s += str(N)
ss = s[::-1] # ss 为得到的二进制字符串
for i in ss:
i = int(i) # 类型转换为数值
if i == 0 and temp:
count += 1
else:
if count > max:
max = count # 判断当前临时间距和最大间距的关系,如果必要更新最大间距
temp = True
count = 1
return max
关注我的公众号免费获取 30G python学习资料!!!