【问题标题】:LeetCode: 1281. Subtract the Product and Sum of Digits of an IntegerLeetCode: 1281. 减去一个整数的乘积和位数之和
【发布时间】:2020-04-20 03:28:07
【问题描述】:

我一直试图从 LeetCoode 那里弄清楚这个问题。这就是问题所在:给定一个整数 n,返回其数字的乘积与其数字之和之间的差。

这是我目前的代码:

/**
 * @param {number} n
 * @return {number}
 */
//n=234
var subtractProductAndSum = function(n) {
    var z= n.toString().length;
    var g= n.toString()
    for(var i=0; i<z; i++){
      var p= g[i]+g[i+1]+g[i+2];
    var y=g[i]*g[i+1]*g[i+2];
        var d= y-p
    }
    return d;
};

【问题讨论】:

    标签: javascript numbers digits


    【解决方案1】:

    请参阅以下内容:

    /**
     * @param {number} n
     * @return {number}
     */
    //n=234
    var subtractProductAndSum = function(n) {
        var digits = n.split('');
        //console.log(digits);
        var prod = digits.reduce((a, b) => a * parseInt(b), 1);
        //console.log(prod);
        var sum = digits.reduce((a, b) => a + parseInt(b), 0);
        //console.log(sum);
        //console.log(prod - sum);
        return prod - sum;
    };
    
    subtractProductAndSum('234');

    【讨论】:

      【解决方案2】:

      你可以试试

      /**
       * @param {number} n
       * @return {number}
       */
      //n=234
      var subtractProductAndSum = function(n) {
      let product = (n+"").split("").reduce((total,curr)=>total * +curr,1);
      let sum = (n+"").split("").reduce((total,curr)=>total + +curr,0);
      
      return product - sum;
      };
      

      /**
       * @param {number} n
       * @return {number}
       */
      //n=234
      var subtractProductAndSum = function(n) {
      let  product = 1;
      let sum = 0;
      n = n+"";
      
      for(let  i = 0; i < n.length; i++){
      product *= +n[i];
      sum += +n[i];
      }
      
      return product - sum;
      };
      
      

      【讨论】:

        【解决方案3】:

        您可以将整数转换为字符串,然后将其拆分。然后使用数字字符串数组,使用reduce 函数找到数字的乘积和数字的总和,如下所示:

        const subtractProductAndSum = function(n) {
          const digitArray = n.toString().split('')
          const digitProduct = digitArray.reduce((previousValue, currentValue) => previousValue * parseInt(currentValue), 1)
          const digitSum = digitArray.reduce((previousValue, currentValue) => previousValue + parseInt(currentValue), 0)
          return digitProduct - digitSum
        }
        

        【讨论】:

          【解决方案4】:

          您的解决方案假定数字为三位数,这可能不是问题的本意。

          我会遍历数字并一个一个地提取数字,然后将它们相加和相乘。然后,只需将两者相减:

          var subtractProductAndSum = function(n) {
              // Initialize the sum and the product with neutral values
              var sum = 0;
              var product = 1;
          
              while (n > 0) {
                  var digit = n % 10;
                  sum += digit;
                  product *= digit;
          
                  n = Math.floor(n / 10);
              }
          
              return product - sum;
          };
          

          【讨论】:

          • 为什么要做digit= n % 10; n = Math.floor(n/10);这样做的目的是什么?
          • @ОлегВойтинський n % 10 返回除以 10 的余数,因此返回最后一位。 Math.floor(n / 10) 删除最后一个数字。
          猜你喜欢
          • 1970-01-01
          • 2016-11-26
          • 1970-01-01
          • 2015-07-29
          • 2021-10-04
          • 2014-02-10
          • 2022-01-03
          • 1970-01-01
          • 2020-08-11
          相关资源
          最近更新 更多