1.バイナリ数1
私の解決策
アイデアは、正しい番号がレコードを見つけるために、toString()メソッドと、バイナリ表現に変換し、その後のindexOfさ開始することです。その後vscode上で実行し、私はそれを補完していない、むしろ美しいと思います!
その他の分析
ここでは、この科学はここに記録整頓に、忘れていた、いくつかの基本的なコンピュータの知識を必要とします。
最初の最も基本的なアンチコードは、元のコードを補完している、非常に明確に書かれた以下のリンク:元のコードは、抗コード補完は、詳細な
- これは、コンピュータの補数に保存されています
- 各整数は4バイト、32ビットであります
- 元のコードの正数、抗コードと全て同じ補完
方法a:ビット単位の分析
-
操作上の定義は、次に、2進数を設定N:
とき、N&1 = 0、次いでNバイナリ右端一方が 0であり;
nは&1 = 1であれば、nはバイナリ右端一方は 1です。 -
上記の説明によれば、次のサイクル:
;数nは、左右のISへの移行ではなく、0サイクルの終わりに等しく
n&1 == 1
、count++
nは正しいもの。
質問:どのように数nが負
- 最上位ビットである1が負の符号ビットとして表現されて補完します。
n>>1
、位置、無限ループを埋めるために左に、右に署名。n>>>1
最後の数字を埋める左に、符号なし右シフト0、nは0となります。
function NumberOf1(n){
let count = 0
let flag = 1
while(n){
count +=n&flag
n = n >>>1
}
return count
}
方法2:N・(N-1)
この方法は、独創的です
- N-1:Nのバイナリ桁が1右端の右になっている上、0になる01を1
- N・(N-1):nは右端の二進数字0が他のビット変わらず、1となります
- 1 nはどのように多く、どのようにこれらの操作の多くを行うことができるようになりますの数、番号を知っているnは0となり
function NumberOf1(n){
let count = 0
while(n){
n&=n-1
count++
}
return count
}