leetcode 2024.9.26
2535. 数组元素和与数字和的绝对差
2535. 数组元素和与数字和的绝对差
给你一个正整数数组 nums
。
- 元素和 是
nums
中的所有元素相加求和。 - 数字和 是
nums
中每一个元素的每一数位(重复数位需多次求和)相加求和。
返回 元素和 与 数字和 的绝对差。
注意:两个整数 x
和 y
的绝对差定义为 |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
题解
class Solution:
def differenceOfSum(self, nums: List[int]) -> int:
sum1 = 0
sum2 = 0
for i in nums:
sum1 = sum1+i
spr = str(i)
for j in range(0,len(spr)):
sum2 = sum2 + int(spr[j])
return abs(sum1-sum2)
class Solution {
public:
int differenceOfSum(vector<int>& nums) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int x = 0, y = 0;
for (int v : nums) {
x += v;
std::string c = std::to_string(v); // 正确声明并初始化字符串c
for (char i : c) {
y += i - '0'; // 将字符转换为对应的数字,注意这里直接减去'0'即可
}
}
return abs(x-y);
}
};
问题
一开始想到了直接去挨个除10,但又觉得是否太无聊了)于是稀碎。。。消耗时间更多应该是在需要多一步转换再进入循环中。python参考题解中有一个用while num实在是巧妙,因为0既是false,便可以减少时间复杂度
class Solution:
def differenceOfSum(self, nums: List[int]) -> int:
x = y = 0
for v in nums:
x += v
while v:
y += v % 10
v //= 10
return x - y
作者:ylb
链接:https://leetcode.cn/problems/difference-between-element-sum-and-digit-sum-of-an-array/solutions/2930665/python3javacgotypescriptrust-yi-ti-yi-ji-8os8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。