【每日一题】LeetCode 2353.数组元素和与数字和的绝对差(数组、数学)
题目描述
给定一个正整数数组 nums
,我们需要计算两个和:
- 元素和:数组中所有元素相加的总和。
- 数字和:数组中每个元素的每一位数字相加的总和。
最终,我们需要返回这两个和之间的绝对差值。
输入示例
示例 1
- 输入:
nums = [1,15,6,3]
- 输出:
9
- 解释:元素和为
1 + 15 + 6 + 3 = 25
,数字和为1 + 1 + 5 + 6 + 3 = 16
,绝对差为|25 - 16| = 9
。
示例 2
- 输入:
nums = [1,2,3,4]
- 输出:
0
- 解释:元素和为
1 + 2 + 3 + 4 = 10
,数字和为1 + 2 + 3 + 4 = 10
,绝对差为|10 - 10| = 0
。
提示
- 数组长度:
1 <= nums.length <= 2000
- 数组元素范围:
1 <= nums[i] <= 2000
思路分析
要解决这个问题,我们可以按照以下步骤进行:
- 计算元素和:遍历数组,将每个元素加到一个累加器变量上。
- 计算数字和:对于数组中的每个元素,我们使用循环逐位提取数字并累加到另一个变量上。
- 计算绝对差:最后,计算两个和的绝对差值。
代码实现
class Solution {
public int differenceOfSum(int[] nums) {
int sum1 = 0; // 用于存储元素和
int sum2 = 0; // 用于存储数字和
int m; // 用于临时存储当前位的数字
// 遍历数组中的每个元素
for (int i = 0; i < nums.length; i++) {
sum1 += nums[i]; // 累加元素和
// 计算当前元素的数字和
while (nums[i] != 0) {
m = nums[i] % 10; // 提取当前元素的最后一位数字
sum2 += m; // 累加到数字和
nums[i] /= 10; // 移除当前元素的最后一位数字
}
}
// 返回元素和与数字和的绝对差
return Math.abs(sum1 - sum2);
}
}