2017-01-25 2 views
0
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 # в одной строке кода?

ответ

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) и формат (n, «8b») хороши для этого.

Смежные вопросы