1281. 整数的各位积和之差 | 刷题打卡

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述

本题来自1281. 整数的各位积和之差

image.png

二、思路分析

n分解成每一位,转化成数字,累加、累乘。

三、AC代码

我这有5中解法,依次是:

1.reduce() 就是专门干累加/累乘这活儿的

var subtractProductAndSum = function (n) {
    n = n.toString().split('');
    return n.reduce((x, y) => (x * y)) - n.reduce((x, y) => (+x) + (+y));
};
复制代码

2.for遍历字符串

var subtractProductAndSum = function(n) {
    let m = n.toString(10);
    let multi = 1;
    let sum = 0;
    for(let i=0; i<m.length; i++) {
        multi *= m[i];
        sum += m[i]*1;
    }
    return multi - sum;
};
复制代码

3.for遍历 parseInt()字符串转化成数字

var subtractProductAndSum = function(n) {
    var str = n.toString();
    var sum = 0, total = 1;
    for(let i = 0 ; i< str.length ; i++){
        sum = sum + parseInt(str[i]);
        total = total * parseInt(str[i]);
    }
    return total - sum;
};
复制代码

4.转化为数组 还是内味儿

var subtractProductAndSum = function(n) {
    n = String(n).split("");
    let add = 0;
    let amass = 1;
    for(let i in n) {
        n[i] = parseInt(n[i]);
        add += n[i];
        amass *= n[i];
    }
    return amass - add;
};
复制代码

5.while、取余和Math.floor()

var subtractProductAndSum = function(n) {
  let sum = 0;
  let product = 1;
  while (n > 0) {
    digit = n % 10;
    sum += digit;
    product *= digit;
    n = Math.floor((n /= 10));
  }
  return product - sum;
};
复制代码

四、总结

最近在深入了解reduce(),所以第一想法就是reduce(),2、3、4属于常规操作。

想着重提一下5:
数字拆分类型题目的三大杀器:while、取余和Math.floor
对10进行取余操作,每一步得到该位置上的数字
使用wihile循环直到取余结束
取余结束的终止条件这个根据不同题目进行不同的设定
最好不要使用parseInt(),如果数字太大和太小会出错,原理是该函数会将第一个参数首先转换成字符串再操作,其次第二个参数不同浏览器默认值不同,我们正常是传10,也就是十进制

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享