[英]split a number that looks like binary into an array when the function is a variable - do I need to convert or something?
当 function 是一个数字时,我无法拆分一堆数字 - 为什么? 你怎么做到这一点?
我正在尝试https://leetcode.com/problems/number-of-1-bits/
接受的答案:
好吧,让我们看看它是如何工作的
num + ''.split('')像
num
是一个数字''.split('')
是空数组,不是数字- 所以,我们有一个数字的总和而不是一个数字,我们将把 num 和 [] 转换为字符串
num
到字符串是 '969',[]
到字符串是 ''(空)- '969' + '' = '969'
num.toString() + ''.split('')像
num.toString()
是一个字符串- ''.split('') 是空数组
- 所以,我们有一个字符串的总和而不是一个字符串,我们将
[]
转换为字符串[]
到字符串是 '' (空)- '969' + '' = '969'
String(num).split('')像
- 让
num
转换为字符串- 并用''分割它
- split 的结果是数组 ['9', '6', '9']
当然,当我尝试时......它不起作用:
var hammingWeight = function(n) { let oneBits = String(n).split(''); console.log(oneBits) }; hammingWeight(0000011110)
什么? 这里发生了什么? 为什么它不起作用?
function hammingWeight(n) { let oneBits = String(n).split(''); console.log(oneBits) }; hammingWeight(0000011110)
为什么这不起作用?
function hammingWeight(n) { let oneBits = n.toString().split(''); console.log(oneBits) }; hammingWeight(0000011110)
超越困惑.... :(
这些数字是从哪里来的???
function hammingWeight(n) { const oneBits = String.fromCharCode(...n.split('')) ) console.log(oneBits) }; hammingWeight(0000011110)
也不行!
Leet Code 网站要求提供 integer,但它正在计算二进制 1 的位数。
为了满足提供的方法,您必须:将数字转换为二进制字符串,将其拆分为单独的位,仅过滤 1 位,然后返回长度。
/** * @param {number} n - a positive integer * @return {number} number of 1 bits present in the binary representation */ const hammingWeight = n => n.toString(2).split('').filter(v => v === '1').length console.log(hammingWeight(11)) // 1011 => 3 console.log(hammingWeight(128)) // 10000000 => 1 console.log(hammingWeight(4294967293)) // 11111111111111111111111111111101 => 31
如果要支持二进制字符串输入,这要容易得多。 您只需要使用字符串参数而不是 integer。
/** * @param {string} bin - an unsigned binary integer string * @return {number} number of 1 bits present in the binary representation */ const hammingWeight = bin => bin.split('').filter(v => v === '1').length console.log(hammingWeight('1011')) // => 3 console.log(hammingWeight('10000000')) // => 1 console.log(hammingWeight('11111111111111111111111111111101')) // => 31
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.