1281. 整数的各位积和之差
1281. 整数的各位积和之差
题目
Given an integer number n
, return the difference between the product of its digits and the sum of its digits.
Example 1:
Input: n = 234
Output: 15
Explanation:
Product of digits = 2 _ 3 _ 4 = 24
Sum of digits = 2 + 3 + 4 = 9
Result = 24 - 9 = 15
Example 2:
Input: n = 4421
Output: 21
Explanation: Product of digits = 4 _ 4 _ 2 * 1 = 32
Sum of digits = 4 + 4 + 2 + 1 = 11
Result = 32 - 11 = 21
Constraints:
1 <= n <= 10^5
题目大意
给你一个整数 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 <= 10^5
解题思路
- 初始化两个变量
product
和sum
,分别用于存储数字位的乘积和总和,初始值分别为 1 和 0; - 使用一个循环逐位提取数字(通过对 10 取余获得个位):
- 将数字加入
sum
; - 将数字乘入
product
; - 更新
n
为去掉最低位的数(通过整除 10 实现);
- 将数字加入
- 循环结束后,返回
product - sum
的结果。
复杂度分析
- 时间复杂度:
O(log_10(n))
,每次迭代处理一位数字,与数字n
的位数成正比。 - 空间复杂度:
O(1)
,使用了常量级变量。
代码
/**
* @param {number} n
* @return {number}
*/
var subtractProductAndSum = function (n) {
let product = 1; // 初始化乘积为 1
let sum = 0; // 初始化和为 0
while (n > 0) {
const digit = n % 10; // 提取当前最低位
product *= digit; // 乘入当前位
sum += digit; // 加入当前位
n = Math.floor(n / 10); // 去掉最低位
}
return product - sum; // 返回乘积与和的差
};