【每日力扣】——交替数字和(python中+号的详解)

题目

给你一个正整数 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

对+号如果认识不深的话很容易在这个地方出错,下次使用+号的时候一定记得要保证左右两边数据类型一致!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值