2017-01-25 15 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が整数の場合、上記のサンプルコードは最初のゼロビットを反転し、次に2番目のゼロビットのインデックスを見つけて表示します。特定の文字の最初のインデックスを見つけるための文字列のルーピング

私はCodeFightsを使って自分のスキルを練習しています。基本的にこれを行うアルゴリズムをどのようにフォーマットするのか分からないようです。

私は適切なインデックスを見つけて、そのパワーを2行上げて1行にすることになっています。私はジェネレータとllambdasを使用するように見えます...何をすべきかわかりません。

2 **整数nの2番目のゼロのインデックス #1行のコードでは?

答えて

0
def secondRightmostZeroBit(n): 
    return 2**bin(n|(n+1))[::-1].index('0') 

これを数日間調査したところ、ここで質問してから5分後に答えを見つけました。 (0,1,1) 'と ' .find(0) 'も便利でした。

上記は私が提出したものです。 n |(n = 1)の質問で説明したように、nの2進表現の右端のゼロを反転させる働きをします。そこから、その結果の文字列/バイナリ表現の順序を逆にし、 '.index'を使用して最初の '0'を検索しました。

これを行う別の方法は、元の質問を表現する方法よりも2進数の操作と関連があります。

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")はそれに適しています。

関連する問題