Python 中的二进制间隙
pythonserver side programmingprogramming更新于 2023/11/9 18:59:00
假设我们有一个正整数 N,我们必须找到 N 的二进制表示中两个连续 1 之间的最长距离。如果没有两个连续的 1,则返回 0。
因此,如果输入是 22,则输出将为 2,因为 22 的二进制表示是 10110。22 的二进制表示中有三个 1,以及两对连续的 1。第一对连续的 1 的距离为 2,第二对连续的 1 的距离为 1。答案将是这两个距离中最大的一个,即 2。
为了解决这个问题,我们将遵循以下步骤 −
- K := 制作 N 的二进制表示位列表
- Max := 0, C := 0, S := 0
- Flag := False
- 对于范围从 0 到 K 大小的 i,执行
- 如果 K[i] 为"1"并且 C 为 0 且 Flag 为 False,则
- C:= i
- Flag := True
- 否则,当 K[i] 为 '1' 且 Flag 为 True 时,则
- S:= i
- 如果 Max<abs(S-C),则
- Max := |S-C|
- C:= S
- 如果 K[i] 为"1"并且 C 为 0 且 Flag 为 False,则
- 返回 Max
让我们看看以下实现以获得更好的理解 −
示例
class Solution: def binaryGap(self, N): B = bin(N).replace('0b','') K = str(B) K = list(K) Max = 0 C = 0 S =0 Flag =False for i in range(len(K)): if K[i] is '1' and C is 0 and Flag is False: C=i Flag = True elif K[i] is '1' and Flag: S=i if Max<abs(S-C): Max = abs(S-C) C=S return Max ob = Solution() print(ob.binaryGap(22))
输入
22
输出
2