67.バイナリシークとJavaScript
67.バイナリ加算
二つのバイナリ文字列をあげて、それらの和を返します.
空の文字列ではなく、数字1と0だけを入力します.
例1:の各文字列は、文字‘0’または‘1’だけで構成される. <=a.length、b.length<=10^4 文字列は、「0」でなければ、プリアンブルゼロを含まない. バイナリ加算の法則:
0+0=0、0+1=1、1+0=1、1+1=10、つまり2つの加算のバイナリビットが1桁だけの場合、加算の結果は1です.二つのバイナリビットが全部0なら、加算の結果はまだ0です.2つの加算のバイナリビットが1であれば、結果は10(10進数の2に相当)、つまり「2進1」ルールであり、10進数の「10進1に会う」と同じです.
思考全体の考え方は、2つの文字列の短い部分を00で補完し、2つの文字列の長さが一致するようにして、最後から巡回して計算して、最終的な結果を得ます.
この問題の大体の考えは上記と一致していますが、文字列の操作の原因で、最後の結果が一人の進数を増やすかどうかは分かりません.
計算時に文字列を直接つづり合わせると、逆の文字が得られます.最後に反転します.
時間複雑度:O(n)O(n)
二つのバイナリ文字列をあげて、それらの和を返します.
空の文字列ではなく、数字1と0だけを入力します.
例1:
: a = "11", b = "1"
: "100"
例2: : a = "1010", b = "1011"
: "10101"
ヒント:0+0=0、0+1=1、1+0=1、1+1=10、つまり2つの加算のバイナリビットが1桁だけの場合、加算の結果は1です.二つのバイナリビットが全部0なら、加算の結果はまだ0です.2つの加算のバイナリビットが1であれば、結果は10(10進数の2に相当)、つまり「2進1」ルールであり、10進数の「10進1に会う」と同じです.
思考全体の考え方は、2つの文字列の短い部分を00で補完し、2つの文字列の長さが一致するようにして、最後から巡回して計算して、最終的な結果を得ます.
この問題の大体の考えは上記と一致していますが、文字列の操作の原因で、最後の結果が一人の進数を増やすかどうかは分かりません.
計算時に文字列を直接つづり合わせると、逆の文字が得られます.最後に反転します.
時間複雑度:O(n)O(n)
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
let ans = "";
let ca = 0;
for(let i = a.length - 1, j = b.length - 1;i >= 0 || j >= 0; i--, j--) {
let sum = ca;
sum += i >= 0 ? parseInt(a[i]) : 0;
sum += j >= 0 ? parseInt(b[j]) : 0;
ans += sum % 2;
ca = Math.floor(sum / 2);
}
ans += ca == 1 ? ca : "";
return ans.split('').reverse().join('');
};
つの拒絶される小さい技巧——BigIntvar addBinary = function(a, b) {
return (BigInt("0b" + a) + BigInt("0b" + b)).toString(2);
}