交替位二进制数
题目
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:
输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:
输入: 11
输出: False
解释:
11的二进制数是: 1011
示例 4:
输入: 10
输出: True
解释:
10的二进制数是: 1010
解答
思路:
- 将数字转为二进制
- 将二进制数转化为字符型
- 判断字符‘11’或着‘00’在不在
代码:
class Solution:
def hasAlternatingBits(self, n):
"""
:type n: int
:rtype: bool
"""
#转变为二进制,‘00’或者‘11’在不在
double=[]
x=0
while n>0:
if pow(2,x)<=n:
x+=1
else:
n=n-pow(2,x-1)
double.append(x-1)
x=0
res=[0]*(max(double)+1)
for i in double:
res[i]=1
j=''
for i in res:
j+=str(i)
if '11'in j:
return False
elif '00' in j:
return False
else:
return True
结果:15%
自己也感觉太复杂了
需要改进!!!