我一直在尝试编码挑战,但没有想到它的逻辑。
问题就像在给您的函数和争论中一样,这是一个包含信息的数组,例如
[56,011000]
因此,当我们运行此函数时,输出为1,因为仅需要更改二进制数(即011000)中的1位数字即可使其等于56。
同样,另一个测试用例是
[44,111111]
预期输出为3,因为只有3位数字需要更改二进制数以使其等于44。
我什至不认为逻辑,所以如果有人帮助我会更好:)
这个问题有两个部分:
对于第一部分,您可以使用此处toString(2)
描述的方法。例如:
console.log(Number(22).toString(2)); // prints "10110"
或者,您可以为此编写自己的函数。一种实现方法是,对于十进制数n,继续查找小于或等于n的2的最高幂,然后从n中减去它。
对于第二部分,您可以如下迭代两个字符串:
let binaryString1 = "101";
let binaryString2 = Number(22).toString(2); // "10110"
const maxLen = Math.max(binaryString1.length, binaryString2.length); // get the length of the longer string
// make sure both strings are of the same length
binaryString1 = binaryString1.padStart(maxLen, "0");
binaryString2 = binaryString2.padStart(maxLen, "0");
let diff = 0;
for (let i=0; i < maxLen; i++) {
if (binaryString1.charAt(i) !== binaryString2.charAt(i)) {
diff++;
}
}
console.log(diff); // prints the number of differing chars
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句