题目
给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号:
最高有效位 上的数字分配到 正 号。
剩余每位上数字的符号都与其相邻数字相反。
返回所有数字及其对应符号的和。
示例 1:
输入:n = 521
输出:4
解释:(+5) + (-2) + (+1) = 4
示例 2:
输入:n = 111
输出:1
解释:(+1) + (-1) + (+1) = 1
示例 3:
输入:n = 886996
输出:0
解释:(+8) + (-8) + (+6) + (-9) + (+9) + (-6) = 0
思路&Code
这是一道简单题,要做的无非就是在数位前添加正负号,我的思路很清晰,首先将所给的整数n化为字符串,遍历字符串的同时定义一个flag代码正负号,每加一个flag都进行正负替换,就可以很简单地解决这道题目了。但是在写代码的过程中我发现了一个很容易写错的地方:对+号的定义。
首先我们来看我一开始写完的代码:
class Solution:
def alternateDigitSum(self, n: int) -> int:
s=str(n)
flag,ans=1,0
for i in s:
ans+=i*flag
flag=-flag
return ans
看了一下逻辑是没有问题的,但是运行起来却会报错,这是为什么呢?
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
ans+=i*flag
首先我们知道在python中,+号是有两个意思的,第一个就是运算中的加号运算符,第二个则是充当字符之间的连接操作符。我们这里写的ans+=i*flag语句,因为ans是一个整型,而i是一个字符型,这就导致了系统无法对这里的+号的含义进行定义,他分不清这里应该进行加法运算还是连接前后字符,但是我们知道这里应该是进行加法运算的,修改的方法也很简单,就是把i化为整型,保持+号两边的数据类型一致就可以正常运行了。
class Solution:
def alternateDigitSum(self, n: int) -> int:
s=str(n)
flag,ans=1,0
for i in s:
ans+=int(i)*flag
#将字符型i化为整型,保持+两边数据类型一致
flag=-flag
return ans
对+号如果认识不深的话很容易在这个地方出错,下次使用+号的时候一定记得要保证左右两边数据类型一致!