【每日一题】LeetCode 2353.数组元素和与数字和的绝对差(数组、数学)

时间:2024-10-03 17:52:40

【每日一题】LeetCode 2353.数组元素和与数字和的绝对差(数组、数学)

题目描述

给定一个正整数数组 nums,我们需要计算两个和:

  1. 元素和:数组中所有元素相加的总和。
  2. 数字和:数组中每个元素的每一位数字相加的总和。

最终,我们需要返回这两个和之间的绝对差值。

输入示例

示例 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

思路分析

要解决这个问题,我们可以按照以下步骤进行:

  1. 计算元素和:遍历数组,将每个元素加到一个累加器变量上。
  2. 计算数字和:对于数组中的每个元素,我们使用循环逐位提取数字并累加到另一个变量上。
  3. 计算绝对差:最后,计算两个和的绝对差值。

代码实现

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);
    }
}