📅  最后修改于: 2023-12-03 15:37:07.621000             🧑  作者: Mango
给定一个整数类型的数组 nums ,请将数组中每个元素按照它们反转后的值求和。
具体来说,如果输入数组 nums = [12,345,2,6,7896],则输出结果为 79017,计算过程为:
因此,总和为 21 + 543 + 2 + 6 + 6987 = 79017。
首先可以想到将数字转换为字符串,然后将每个字符串反转,然后再转换回数字,并且求和。
class Solution:
def reverse(self, x: int) -> int:
ans = 0
neg = 1
if x < 0:
neg = -1
x = -x
while x > 0:
ans = ans * 10 + x % 10
x //= 10
if ans * neg > 2 ** 31 - 1 or ans * neg < -2 ** 31:
return 0
return ans * neg
def reverseSum(self, nums: List[int]) -> int:
res = 0
for num in nums:
res += self.reverse(num)
return res
以上代码中,我们首先定义了一个变量 ans,来存储反转后的结果。其中对于每个数字,我们通过取余操作得到最后一位数字,然后将 ans 的值乘 10 并加上该数字,相当于原数值左移一位并加上 x 的最后一位数字。然后我们将 x 除以 10 进行一位的删除,并在 ans 的基础上继续进行操作。
由于值可能会超过 32 位有符号整数的范围,因此我们要在计算之前进行判断,防止出现溢出的情况。
最后将每个反转后的值累加起来,便是最终结果。
完整代码如下:
class Solution:
def reverse(self, x: int) -> int:
ans = 0
neg = 1
if x < 0:
neg = -1
x = -x
while x > 0:
ans = ans * 10 + x % 10
x //= 10
if ans * neg > 2 ** 31 - 1 or ans * neg < -2 ** 31:
return 0
return ans * neg
def reverseSum(self, nums: List[int]) -> int:
res = 0
for num in nums:
res += self.reverse(num)
return res