今日直面する問題は、LeetCode 231の質問です。問題は、簡単な質問で、番号を入力してn個、数が2のべき乗でないかを決定するように求め
バイナリ・ビット・コンピューティングは、より効率的であるため、最初の考えは、ビット演算を使用することで、この問題を参照するには
、私の独自のソリューションこれは、次のコードです:
パブリック 静的 ブール裁判官(int型N){ int型 NUM = 1 。 ブール flage = 偽; 一方、(NUM <= N){ 場合(NUM == N){ flage = 真。 破ります; } 他{ NUM = NUM << 1 。 } } 戻りflage。 }
しかし、この方式nは特にタイムアウト。プログラムに他の人の答えを参照した後、私は数nが2のべき乗であれば、その数は三つの条件を満たさなければならないことがわかりました。
①最進数は、他のビットは0であり、1であり;
②数マイナス最上位ビットの一方が他方のビットは1であり、0であり;
③数が0より大きくする必要があり
、したがって、次のように、位置算出に利用することができます。
パブリック静的ブールJUDGE2(int型N){ //(N <= 0)falseを返す場合。 //リターン((N・(N-1))== 0)。 //或者写成 リターンN> 0 &&(N・(N-1))== 0。 }