for i in reversed(bin(n|(n+1))[2:]):#loops through representation of
# integer n, converted to binary, and flips first 0 bit
if i == '0':
print(str(count))
count=0
break
count +=1
如果n是整数,则上面的示例代码翻转第一个零位,然后查找并打印第二个零位的索引。
我正在使用CodeFights,练习我的技能,似乎无法弄清楚如何格式化算法,基本完成了这个功能。
我应该找到合适的指数并在一行中将该能力提高2。我考虑过使用发电机和llambdas ......不知道该怎么做。
所以,具体来说,我怎么能得到 2 **整数n的第二个零的索引 #in一行代码?
答案 0 :(得分:0)
def secondRightmostZeroBit(n):
return 2**bin(n|(n+1))[::-1].index('0')
研究了几天,在这里询问后五分钟偶然发现了答案。 ' .replace(0,1,1)'和 ' .find(0)'也会很有用。
以上是我最终提交的内容。如问题n |(n = 1)中所解释的那样,用于在n的二进制表示中翻转最右边的零。从那里我颠倒了该结果的字符串/二进制表示的顺序,并使用了' .index'检索第一个' 0'被发现。
另一种方法与二进制数的操作有关,而不是我对原始问题的处理方式。
def secondRightmostZeroBit(n):
return ~n & (~n-1) & -(~n & (~n-1))
我过去没有太多理由去做这种操作,所以当我解释这样的代码时,我总是在查看引用。 https://www.tutorialspoint.com/python/bitwise_operators_example.htm如果您想了解它,我建议为n插入一个特定的数字,转换为二进制,然后进行处理。做了几次,应该清楚发生了什么。你也可以将它的个性化插入你的交互式痛苦中,但除非你正在查看二进制文件,否则这对你没有多大帮助。 bin(n)和format(n," 8b")对此有好处。