【问题标题】:Function to check if a given number do contain les than two different digits检查给定数字是否包含少于两个不同数字的函数
【发布时间】:2022-06-28 02:24:34
【问题描述】:

我想实现一个函数来检查一个给定的数字是否包含少于两个不同的数字,称为 duodigits

例如:

12 , 110 , -33333 : 都是双位数字,因为它们不超过两个不同的数字 102 : is not a duodigit since his digits ; 1和0、2是三个不同的数字

我怎样才能实现一个方法,它可以迭代并检查它是否是一个 duodgits 并返回 true 或 false 作为结果

【问题讨论】:

  • 创建一个Set,其元素是数字中的所有数字。然后得到集合的大小。
  • new Set(Math.abs(num).toString().split("")).length > 2
  • @2pichar A Set 没有length。你的意思是size
  • @2pichar,注意你不需要split,因为JS已经将字符串视为字符数组^_^

标签: javascript


【解决方案1】:

我会这样做:

/**
 * Checks if a number is a duodigit.
 * @param {number} num 
 * @returns {boolean}
 */
function isDuodigit(num) {
  return new Set(Math.abs(num).toString()).size <= 2;
}

【讨论】:

    【解决方案2】:

    我的解决方案是:

    function isDuoDigit(num) {
    
      const numArr = Array.from(num.toString());
    
      const uniqueNums = numArr.filter((num, index) => numArr.indexOf(num) === index);
    
      return uniqueNums.length > 2 ? "Number is not DuoDigit" : "Number is DuoDigit!"
    }
    
    console.log(isDuoDigit(11111000000)); // Number is DuoDigit!
    console.log(isDuoDigit(111155555500000)); // Number is NOT DuoDigit!
    1. 将数字转换为字符串数组(102 = ["1", "0", "2"])

      const numArr = Array.from(num.toString());

    2. 获取具有唯一值的数组(不重复)

      const uniqueNums = numArr.filter((num, index) => numArr.indexOf(num) === index);

    3. 我们检查 uniqueNums 数组的长度是否大于 2。如果为真,则表示数字不是 DuoDigit,如果数组长度小于或等于 2,则数字是 DuoDigit

      返回 uniqueNums.length > 2 ? "Number is not DuoDigit" : "Number is DuoDigit!"

    【讨论】:

      【解决方案3】:

      如果你想在没有集合或字符串转换的情况下进行。

      function isDuoDigit(num){
          num = Math.abs(num);
          let first = '', second = '';
            while (num > 0) {
              let digit = num % 10;
              if(first === '')
                first = digit
              else if(second === '')
                second = digit
              else if(first !== digit && second !== digit)
                 return false;
              num = Math.trunc(num / 10);
            }
        return true;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-01-03
        • 2021-12-15
        • 2013-08-11
        • 2012-03-27
        • 1970-01-01
        • 2021-08-03
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多