1. 题目描述
给你一个整数 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subtract-the-product-and-sum-of-digits-of-an-integer
2. 解题思路(采用JavaScript语言)
(1)对 n 进行取余整除
var subtractProductAndSum = function(n) {
var x = 1;
var y = 0;
while(true){
if(n === 0){
break;
}
x = x * (n % 10);
y = y + (n % 10);
n = Math.floor(n / 10);
}
return x-y;
};
算法分析:
时间复杂度为 O(1),执行用时 : 56 ms,内存消耗 : 34.2 MB
将 n 与10取模得的个位数字,再将 n 除以 10 并利用 Math.floor() 向下取整得删去个位数字后剩下的数字,循环进行,直到 n 为个位数(即 Math.floor(n / 10) == 0 )为止 。
(2)将 n 转换为字符串
var subtractProductAndSum = function(n) {
n = "" + n;
var x = 1;
var y = 0;
var arr = n.split("");
for(var i = 0; i < arr.length; i++){
x = x * Number(arr[i]);
y = y + Number(arr[i]);
}
return x-y;
};
算法分析:
时间复杂度为 O(1),执行用时 : 68 ms,内存消耗 : 34.3 MB
将 n 转换为字符串,在用 split() 方法将字符串按各字符存在数组里,注意要将数组中的各个字符转换为Number类型,再进行相乘或相加。
感谢您的阅读,如有误,望指正!