力扣习题868. 二进制间距


解题思路
1.十进制转换成二进制
2.二进制转换成列表,如果列表中含有1的元素少于2,则返回0,如果列表中的含有1的元素大于或等于2,继续下一步判断
3.将第二步的列表转换成含有位置信息的元组列表
4.遍历这个元组列表,将元素含有1的加入到新的列表当中
5.遍历新列表当中的第一位与第二位进行绝对值相差,绝对值最大的,则为答案。

def binaryGap(self,N): #转换为二进制 N_bin=bin(N) #转换成列表 N_binLst=list(map(str,N_bin)) print(N_binLst) #判断列表中1元素个数 if N_binLst.count('1')<=1: return 0 #转换成数组 oneLst=[] N_tupleLst=list(enumerate(N_binLst)) print(N_tupleLst) for N_tuple in N_tupleLst: if N_tuple[1]=='1': oneLst.append(N_tuple[0]) MAX=0 for i in range(1,len(oneLst)): y=abs(oneLst[i]-oneLst[i-1]) if y>MAX: MAX=y return MAX
解题2:
在列表A中记录数字N的二进制表示1的位置,利于位运算找到对应的位置
`
def binaryGap(self,N):
A=[i for i in range(32) if (N>>i)&1]
if len(A)<2:return 0
return max(A[i+1]-A[i] for i in range(len(A)-1))

posted @ 2020-07-31 14:20  hisweetyGirl  阅读(125)  评论(0编辑  收藏  举报