868 二進位制間距 python

2021-09-01 00:23:56 字數 2069 閱讀 9341

'''

給定乙個正整數 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 。

1 <= n <= 10^9

'''class

solution

:def

binarygap

(self, n)

:"""

:type n: int

:rtype: int

"""print

(bin

(n))

n =-1

k =for i in

bin(n)[2

:]:# bin(n)[2:] 得到二進位制2位以後的數

ifint

(i)==

1and n <0:

#當第一次出現1時

n+=1elif

int(i)==1

and n >=0:

#當第二次出現1時

n+=1 n =

0else

:#當不出現!時

n+=1if k ==

:#當沒有出現第二次1時

return

0return

max(k)

defbinarygap2

(self, n)

:# n >> i >>是右移,右移1位相當於除以2 0b10111 0b1011

# &按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

# if (n >> i) & 1 這意思是右移1位,如果移除的是1,就新增到a裡

a =[i for i in

range(32

)if(n >> i)&1

]iflen(a)

<2:

return

0# 如果少於兩個1,返回0

return

max(a[i +1]

- a[i]

for i in

range

(len

(a)-1)

)# 用後面的數減去前面的數

defbinarygap3

(self, n)

:# 舉一返三

b =[i for i in

range

(len

(bin

(n)[2:

]))if

bin(n)[2

:][i]==

'1']

iflen

(b)<2:

return

0return

max(b[i +1]

- b[i]

for i in

range

(len

(b)-1)

)# 思路:記錄下該二進位制表示中每個 1 的索引。計算陣列中相鄰值.

print

(solution(

).binarygap(n=23)

)print

(solution(

).binarygap2(n=23)

)print

(solution(

).binarygap3(n=23)

)

868 二進位制間距

給定乙個正整數 n,找到並返回 n 的二進位制表示中兩個 相鄰 1 之間的 最長距離 如果不存在兩個相鄰的 1,返回 0 如果只有 0 將兩個 1 分隔開 可能不存在 0 則認為這兩個 1 彼此 相鄰 兩個 1 之間的距離是它們的二進位制表示中位置的絕對差。例如,1001 中的兩個 1 的距離為 3...

868 二進位制間距

題目描述 給定乙個正整數 n,找到並返回 n 的二進位制表示中兩個相鄰 1 之間的最長距離。如果沒有兩個相鄰的 1,返回 0 示例 1 輸入 22 輸出 2 解釋 22 的二進位制是 0b10110 在 22 的二進位制表示中,有三個 1,組成兩對相鄰的 1 第一對相鄰的 1 中,兩個 1 之間的距...

868 二進位制間距

給定乙個正整數 n,找到並返回 n 的二進位制表示中兩個連續的 1 之間的最長距離。如果沒有兩個連續的 1,返回 0 示例 1 輸入 22 輸出 2 解釋 22 的二進位制是 0b10110 在 22 的二進位制表示中,有三個 1,組成兩對連續的 1 第一對連續的 1 中,兩個 1 之間的距離為 2...