前言
周五下午了,大家这周的需求写完了吗?真羡慕大佬们还有需求没写完!
不像我,下午睡醒就等着下班了🐶 那就写写题解吧😄
题目介绍
原题地址: 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 <=
解题思路
求一个整数n的各位数字之积和各位数字之和!
这道题有两种基本解法:
转字符串
转字符串的做法就很简单:
-
把
n转成字符串str。 -
循环字符串
str,每个值str[i]依次相加、相乘(注意对str[i]的处理)。 -
然后就可以得到题目中所要求的
积和和了,然后返回差即可。
不转字符串
这道题其实主要就是如何拿到n的每一位,所以如果不将n转成字符串的话,我们可以用%的方法来取余解答这道题。
设定sum为和,total为积,初始值都为0。
n % 10可以取到n的个位,对应的sum和total存起来。- 上一步我们已经取到了
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题区域和检索 - 数组不可变] | 刷题打卡
[LeetCode0304题二维区域和检索 - 矩阵不可变] | 刷题打卡
[LeetCode236题二叉树的最近公共祖先] | 刷题打卡
[LeetCode1124题表现良好的最长时间段] | 刷题打卡
[LeetCode1047题删除字符串中的所有相邻重复项] | 刷题打卡
[LeetCode1438题绝对差不超过限制的最长连续子数组] | 刷题打卡
[LeetCode331题验证二叉树的前序序列化] | 刷题打卡
总结
加油!hxdm!!!💪💪💪
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情