[LeetCode1281题整数的各位积和之差] | 刷题打卡

342 阅读3分钟

前言

周五下午了,大家这周的需求写完了吗?真羡慕大佬们还有需求没写完!

不像我,下午睡醒就等着下班了🐶 那就写写题解吧😄

image.png

题目介绍

原题地址: 1281. 整数的各位积和之差

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。

示例 1:

输入:n = 234
输出:15 
解释:
各位数之积 = 2 * 3 * 4 = 24 
各位数之和 = 2 + 3 + 4 = 9 
结果 = 24 - 9 = 15

示例 2:

输入:n = 4421
输出:21
解释: 
各位数之积 = 4 * 4 * 2 * 1 = 32 
各位数之和 = 4 + 4 + 2 + 1 = 11 
结果 = 32 - 11 = 21

提示:

  • 1 <= n <= 10510^5

解题思路

求一个整数n各位数字之积各位数字之和!

这道题有两种基本解法:

转字符串

转字符串的做法就很简单:

  • n转成字符串str

  • 循环字符串str,每个值str[i]依次相加、相乘(注意对str[i]的处理)。

  • 然后就可以得到题目中所要求的了,然后返回差即可。

不转字符串

这道题其实主要就是如何拿到n的每一位,所以如果不将n转成字符串的话,我们可以用%的方法来取余解答这道题。

设定sum为和,total为积,初始值都为0

  • n % 10可以取到n的个位,对应的sumtotal存起来。
  • 上一步我们已经取到了n的个位,所以这一步我们去掉已经拿到的值 Math.floor(n / 10),然后继续上一步即可。
  • 直到不满足n > 0的情况结束,返回sum - total即可。

eval函数

我在看题解的时候,发现了一个很机智的解法,可以说是巧用JavaScript,贴出来秀一下。

  • n转字符串然后分割成数组。

  • 将数组用*+的形式连接成字符串。

  • eval函数执行字符串。

解题代码

转字符串

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;
}

不转字符串

var subtractProductAndSum = function(n) {
    let sum = 0;
    let total = 1;
    while (n) {
        sum = n % 10 + sum;
        total = n % 10 * total;
        n = Math.floor(n/10);
    }
    return total - sum;
}

eval函数

var subtractProductAndSum = function(n) {
    let arr = n.toString().split('');
    let a = eval(arr.join('*'));
    let b = eval(arr.join('+'));
    return a-b;
};

刷题打卡记录

这里是之前的刷题打卡记录,大家有兴趣的可以看下,如果有什么不同的见解和看法或者觉得有什么错误的,欢迎在评论区留言!🙏🙏🙏

[LeetCode0303题区域和检索 - 数组不可变] | 刷题打卡

[LeetCode1200. 最小绝对差] | 刷题打卡

[LeetCode0304题二维区域和检索 - 矩阵不可变] | 刷题打卡

[LeetCode11题盛最多水的容器] | 刷题打卡

[LeetCode0338题比特位计数] | 刷题打卡

[LeetCode209题长度最小的子数组] | 刷题打卡

[LeetCode236题二叉树的最近公共祖先] | 刷题打卡

[LeetCode141题环形链表] | 刷题打卡

[LeetCode53题最大子序和] | 刷题打卡

[LeetCode48题旋转图像] | 刷题打卡

[LeetCode155题最小栈] | 刷题打卡

[LeetCode1124题表现良好的最长时间段] | 刷题打卡

[LeetCode274题H指数] | 刷题打卡

[LeetCode367题有效的完全平方数] | 刷题打卡

[LeetCode1047题删除字符串中的所有相邻重复项] | 刷题打卡

[LeetCode160题相交链表] | 刷题打卡

[LeetCode1438题绝对差不超过限制的最长连续子数组] | 刷题打卡

[LeetCode434题字符串中的单词数] | 刷题打卡

[LeetCode75题颜色分类] | 刷题打卡

[LeetCode513题找树左下角的值] | 刷题打卡

[LeetCode94题二叉树的中序遍历] | 刷题打卡

[LeetCode617题合并二叉树] | 刷题打卡

[LeetCode331题验证二叉树的前序序列化] | 刷题打卡

总结

加油!hxdm!!!💪💪💪

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情