868.二进制间距(python)

题目描述

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

示例 1:

输入:n = 22
输出:2
解释:22 的二进制是 "10110" 。
在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。
第一对相邻的 1 中,两个 1 之间的距离为 2 。
第二对相邻的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。


示例 2:

输入:n = 8
输出:0
解释:8 的二进制是 "1000" 。
在 8 的二进制表示中没有相邻的两个 1,所以返回 0 。

示例 3:

输入:n = 5
输出:2
解释:5 的二进制是 "101" 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-gap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

看到这题就想着通过双“指针”,其实不是指针,只是标识位置的两个int型变量,让列表中存储的二进制序列从头(高位)往后(低位)依次扫描,遇到二进制 '1',则给i赋值为j,给j赋值为k,意思是一个指针j指向后面相邻的' 1' ,一个指针i指向当前的'1',还有一个k用于列表的遍历,记录当前位置下标。因为初始化时i,j,k都是0,遇到1之后,会让i=j,j=k,通过k不停的往后走,i会接替它的相邻的1即j的位置,而j也变为了新的1的位置k,这样就保证了i,j永远指向的是相邻的两个1,把j-i的值存入ans列表中,待循环结束,返回ans的最大值即可。

注:

1:可以把一个数的二进制形式放入一个列表中,这样会把二进制的01作为字符‘0’‘1’存入一个列表,而且会把‘0b’表示二进制的格式也存入,所以需要对这个列表进行截断前两个位置的处理。

2:因为一个数的二进制表示,它的最高位一定是1,因为不会有多余的用不到的0放在高位,所以这个思路就可以通过,如果高位还有冗余的0,比如输入0100==4的二进制,这个思路就不满足题意了。好在二进制表示4时-->4==0b100

代码

class Solution:
    def binaryGap(self, n: int) -> int:
        ls=list(bin(n))
        ls=ls[2::]
        ans=[]
        size=len(ls)
        i,j,k=0,0,0
        while k<size:
            if ls[k]>'0':
                i=j
                j=k
                ans.append(j-i)
            k+=1
        return max(ans)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python ,可以使用内置函数 `int(string, base)` 实现进制转换。 例如,将十六进制字符串 "FF" 转换为十进制,可以使用以下代码: ``` >>> int("FF", 16) 255 ``` 同样,可以使用内置函数 `format(number, 'b')` 将十进制数字转换为二进制字符串: ``` >>> format(255, 'b') '11111111' ``` 也可以使用内置函数 `format(number, 'x')` 将十进制数字转换为十六进制字符串: ``` >>> format(255, 'x') 'ff' ``` ### 回答2: 进制转换指的是将一个数值在不同进制之间表示的过程。在 Python ,可以使用内置的函数来实现进制转换。 1. 十进制转二进制: 使用 `bin()` 函数将十进制数转换为二进制数。例如,将十进制数 10 转换为二进制数: ```python dec_num = 10 bin_num = bin(dec_num) print(bin_num) # 输出:0b1010 ``` 这里的 `0b` 是 Python 用来表示二进制数的前缀。 2. 十进制转八进制: 使用 `oct()` 函数将十进制数转换为八进制数。例如,将十进制数 10 转换为八进制数: ```python dec_num = 10 oct_num = oct(dec_num) print(oct_num) # 输出:0o12 ``` 这里的 `0o` 是 Python 用来表示八进制数的前缀。 3. 十进制转十六进制: 使用 `hex()` 函数将十进制数转换为十六进制数。例如,将十进制数 10 转换为十六进制数: ```python dec_num = 10 hex_num = hex(dec_num) print(hex_num) # 输出:0xa ``` 这里的 `0x` 是 Python 用来表示十六进制数的前缀。 4. 其他进制转十进制: 使用 `int()` 函数将其他进制的字符串转换为十进制数。需要提供第二个参数来指定原始进制。例如,将二进制数 `1010` 转换为十进制数: ```python bin_num = '1010' dec_num = int(bin_num, 2) print(dec_num) # 输出:10 ``` 在这个例子,第二个参数 `2` 表示原始进制是二进制。 进制转换在计算机科学一个重要的概念,能够帮助我们在不同的进制之间进行灵活的数值表示和计算。在 Python ,可以很方便地使用内置的函数实现进制转换。 ### 回答3: 在Python,可以使用内置的函数来进行进制转换。 如果要将一个十进制数转换为其他进制,可以使用`bin()`、`oct()`、`hex()`函数。其,`bin()`用于转换为二进制,`oct()`用于转换为八进制,`hex()`用于转换为十六进制。 下面是一个示例代码,将十进制数转换为二进制、八进制和十六进制: ``` decimal_number = 10 binary_number = bin(decimal_number) octal_number = oct(decimal_number) hexadecimal_number = hex(decimal_number) print("二进制:", binary_number) # 输出:0b1010 print("八进制:", octal_number) # 输出:0o12 print("十六进制:", hexadecimal_number) # 输出:0xa ``` 如果要将其他进制的数转换为十进制,则可以使用`int()`函数。`int()`函数有两个参数,第一个参数是要进行转换的数,第二个参数是原数的进制。例如,`int('1010', 2)`将二进制数'1010'转换为十进制数。 下面是一个示例代码,将二进制、八进制和十六进制数转换为十进制: ``` binary_number = '1010' octal_number = '12' hexadecimal_number = 'a' decimal_number_binary = int(binary_number, 2) decimal_number_octal = int(octal_number, 8) decimal_number_hexadecimal = int(hexadecimal_number, 16) print("二进制转十进制:", decimal_number_binary) # 输出:10 print("八进制转十进制:", decimal_number_octal) # 输出:10 print("十六进制转十进制:", decimal_number_hexadecimal) # 输出:10 ``` 通过使用这些函数,可以方便地在Python进行进制转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值