跳至主要內容

1281. 整数的各位积和之差


1281. 整数的各位积和之差

🟢   🔖  数学  🔗 力扣open in new window LeetCodeopen in new window

题目

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

解题思路

  1. 初始化两个变量 productsum,分别用于存储数字位的乘积和总和,初始值分别为 1 和 0;
  2. 使用一个循环逐位提取数字(通过对 10 取余获得个位):
    • 将数字加入 sum
    • 将数字乘入 product
    • 更新 n 为去掉最低位的数(通过整除 10 实现);
  3. 循环结束后,返回 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; // 返回乘积与和的差
};