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