Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 题目给出是一个十进制的正整数
- 要求对正整数的二进制,0和1交替情况
- 如果二进制相邻数组的是相同的,则返回False
二、思路分析:
我们拿到本题,与我们昨天做67. 二进制求和 关于二进制的题类似,思路如下:
- 首先对十进制整数转换成2进制形式
- 将二进制转换成字符串
- 使用for循环对二进制字符串进行遍历判断
- 如果当Bin[i-1]和Bin[i]相等时,则直接返回False。
对于十进制转换成二进制,我们先来看一下转换原理。例如5-->二进制 101
按照如上思路,我们写出了十进制转换二进制
S = ""
while n :
pre = n%2
S = S + str(pre)
n = n/2
print(S[::-1])
十进制转换为二进制,我们也可以直接使用python bin() 方法进行直接转换
好呐,经过以上转换,我们求出了二进制。然后进行遍历字符比对,完整代码如下:
class Solution(object):
def hasAlternatingBits(self, n):
"""
:type n: int
:rtype: bool
"""
B = bin(n)
for i in range(1,len(str(B))):
if B[i-1] == B[i] :
return False
return True
我们发现使用for循环,时间复杂度为O(n),可以进行优化。直接在转换二进制的时候进行判断,代码如下:
时间复杂度O(logn),空间复杂度O(1)
class Solution(object):
def hasAlternatingBits(self, n):
"""
:type n: int
:rtype: bool
"""
tmp = 2
while n :
pre = n%2
if tmp == pre:
return False
tmp = pre
n = n/2
return True
相比以上方法,最快还是进行位运算,空间复杂度直接可以为O(1).
a = n ^ (n >> 1)
return a & (a + 1) == 0
三、总结:
本题,我们采用第一种方法提交的AC记录如下:
进制位计算的题目,我们可以使用字符串的形式去解决。
以上是本期内容,欢迎大佬们点赞评论,下期见~~