2535.数组元素和与数字和的绝对差

【LetMeFly】2535.数组元素和与数字和的绝对差:模拟

力扣题目链接:https://leetcode.cn/problems/difference-between-element-sum-and-digit-sum-of-an-array/

给你一个正整数数组 nums

  • 元素和nums 中的所有元素相加求和。
  • 数字和 是 nums 中每一个元素的每一数位(重复数位需多次求和)相加求和。

返回 元素和数字和 的绝对差。

注意:两个整数 xy 的绝对差定义为 |x - y|

 

示例 1:

输入:nums = [1,15,6,3]
输出:9
解释:
nums 的元素和是 1 + 15 + 6 + 3 = 25 。
nums 的数字和是 1 + 1 + 5 + 6 + 3 = 16 。
元素和与数字和的绝对差是 |25 - 16| = 9 。

示例 2:

输入:nums = [1,2,3,4]
输出:0
解释:
nums 的元素和是 1 + 2 + 3 + 4 = 10 。
nums 的数字和是 1 + 2 + 3 + 4 = 10 。
元素和与数字和的绝对差是 |10 - 10| = 0 。

 

提示:

  • 1 <= nums.length <= 2000
  • 1 <= nums[i] <= 2000

解题方法:模拟

写一个函数getSum(x)返回整数x在十进制下的每位之和:

1
2
3
4
5
6
7
8
int getSum(int x) {
int ans = 0;
while (x > 0) {
ans += x % 10;
x /= 10;
}
return ans;
}

使用两个变量xy分别记录元素之和和元素每一位之和,遍历一遍原始数组即可得到这个值。

最终,返回abs(x - y)即为答案。

  • 时间复杂度$O(len(nums)\times \log M)$,其中$M$是$nums[i]$可取值范围的最大值$2000$。
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
private:
int getSum(int n) {
int ans = 0;
while (n) {
ans += n % 10;
n /= 10;
}
return ans;
}
public:
int differenceOfSum(vector<int>& nums) {
int x = 0, y = 0;
for (int t : nums) {
x += t, y += getSum(t);
}
return abs(x - y);
}
};

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

func abs(x int) int {
if x >= 0 {
return x
}
return -x
}

func getSum(x int) int {
ans := 0
for x > 0 {
ans += x % 10
x /= 10
}
return ans
}

func differenceOfSum(nums []int) int {
x, y := 0, 0
for _, t := range nums {
x += t
y += getSum(t)
}
return abs(x - y)
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
private int getSum(int t) {
int ans = 0;
while (t > 0) {
ans += t % 10;
t /= 10;
}
return ans;
}

public int differenceOfSum(int[] nums) {
int x = 0, y = 0;
for (int t : nums) {
x += t;
y += getSum(t);
}
return Math.abs(x - y);
}
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from typing import List

class Solution:
def getSum(self, x: int) -> int:
ans = 0
while x:
ans += x % 10
x //= 10
return ans

def differenceOfSum(self, nums: List[int]) -> int:
x = y = 0
for t in nums:
x += t
y += self.getSum(t)
return abs(x - y)

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/142568318


2535.数组元素和与数字和的绝对差
https://blog.letmefly.xyz/2024/09/26/LeetCode 2535.数组元素和与数字和的绝对差/
作者
Tisfy
发布于
2024年9月26日
许可协议