繁体   English   中英

当 function 是一个变量时,将一个看起来像二进制的数字拆分为一个数组 - 我需要转换还是什么?

[英]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('')

  1. num是一个数字
  2. ''.split('')是空数组,不是数字
  3. 所以,我们有一个数字的总和而不是一个数字,我们将把 num 和 [] 转换为字符串
  4. num到字符串是 '969', []到字符串是 ''(空)
  5. '969' + '' = '969'

num.toString() + ''.split('')

  1. num.toString()是一个字符串
  2. ''.split('') 是空数组
  3. 所以,我们有一个字符串的总和而不是一个字符串,我们将[]转换为字符串
  4. []到字符串是 '' (空)
  5. '969' + '' = '969'

String(num).split('')

  1. num转换为字符串
  2. 并用''分割它
  3. 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)

超越困惑.... :(

这些数字是从哪里来的???

JavaScript 中的二进制到字符串

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM