Description#
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:
Solutions#
Solution 1: Simulation#
We use two variables $x$ and $y$ to record the product of the digits and the sum of the digits respectively. At the beginning, $x=1,y=0$.
When $n \gt 0$, each time we take the $mod$ of $n$ by $10$ to get the current digit $v$, and continue the next loop by dividing $n$ by $10$. In each loop, we update $x = x \times v$, $y = y + v$.
Finally, we return $x - y$.
The time complexity is $O(\log n)$, where $n$ is the given integer. The space complexity is $O(1)$.
1
2
3
4
5
6
7
8
| class Solution:
def subtractProductAndSum(self, n: int) -> int:
x, y = 1, 0
while n:
n, v = divmod(n, 10)
x *= v
y += v
return x - y
|
1
2
3
4
5
6
7
8
9
10
11
| class Solution {
public int subtractProductAndSum(int n) {
int x = 1, y = 0;
for (; n > 0; n /= 10) {
int v = n % 10;
x *= v;
y += v;
}
return x - y;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
| class Solution {
public:
int subtractProductAndSum(int n) {
int x = 1, y = 0;
for (; n; n /= 10) {
int v = n % 10;
x *= v;
y += v;
}
return x - y;
}
};
|
1
2
3
4
5
6
7
8
9
| func subtractProductAndSum(n int) int {
x, y := 1, 0
for ; n > 0; n /= 10 {
v := n % 10
x *= v
y += v
}
return x - y
}
|
1
2
3
4
5
6
7
8
9
| function subtractProductAndSum(n: number): number {
let [x, y] = [1, 0];
for (; n > 0; n = Math.floor(n / 10)) {
const v = n % 10;
x *= v;
y += v;
}
return x - y;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| impl Solution {
pub fn subtract_product_and_sum(mut n: i32) -> i32 {
let mut x = 1;
let mut y = 0;
while n != 0 {
let v = n % 10;
n /= 10;
x *= v;
y += v;
}
x - y
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
| public class Solution {
public int SubtractProductAndSum(int n) {
int x = 1;
int y = 0;
for (; n > 0; n /= 10) {
int v = n % 10;
x *= v;
y += v;
}
return x - y;
}
}
|
1
2
3
4
5
6
7
8
9
10
| int subtractProductAndSum(int n) {
int x = 1;
int y = 0;
for (; n > 0; n /= 10) {
int v = n % 10;
x *= v;
y += v;
}
return x - y;
}
|
Solution 2#
1
2
3
4
| class Solution:
def subtractProductAndSum(self, n: int) -> int:
nums = list(map(int, str(n)))
return prod(nums) - sum(nums)
|