【问题标题】:Split a number that looks like binary into an array when the function is a variable - do I need to convert or something?当函数是变量时,将看起来像二进制的数字拆分为数组 - 我需要转换吗?
【发布时间】:2022-10-22 18:10:02
【问题描述】:

当函数是数字时,我不能拆分一堆数字 - 为什么?你怎么做到这一点?

我正在尝试https://leetcode.com/problems/number-of-1-bits/

Ways to split a Number into an Array

接受的答案:

好吧,让我们看看它是如何工作的

数字 + ''.split('')

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

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

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

      String(num).split('')

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

        我很困惑——这些数字是从哪里来的?

        Binary to String in JavaScript

        function hammingWeight(n) {
            const oneBits = String.fromCharCode(
                  ...n.split(''))
            )
            console.log(oneBits)
        };
        
        hammingWeight(0000011110)

        也不行!

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    Leet Code 网站要求一个整数,但它正在计算二进制 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

    如果要支持二进制字符串输入,这要容易得多。您只需要使用字符串参数而不是整数。

    /**
     * @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

    解释

    详细地说,您的问题是您在示例中发送的是八进制整数,而不是二进制字符串。

    function hammingWeight(n) {
      let oneBits = String(n).split(''); // ['4','6','8','0']
      console.log(oneBits)
    };
    
    hammingWeight(0000011110) // Same as 011110 or 4680

    您可以像这样将其作为文字二进制整数发送,但您仍然需要使用2(二进制)的基数值对其进行字符串化:

    function hammingWeight(n) {
      let oneBits = n.toString(2).split(''); // ['1','1','1','1','0']
      console.log(oneBits)
    };
    
    hammingWeight(0b0000011110) // Prefix literal binary number with '0b'

    【讨论】:

    • @Amaarockz 该函数正在请求一个数字,而不是一个字符串。值1110 将是输入14。那将是一个无效的参数。
    • 输入不能是只有 0 和 1 的数字
    • 2 在 toString 中做什么?
    • @kawnah Leet Code 网站声明n 的参数类型是number。字符串不是数字。见:@param {number} n - a positive integer
    • @kawnah 2 是基数。它告诉 JS 将十进制整数转换为二进制数字字符串表示。
    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 2019-06-03
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    相关资源
    最近更新 更多