剑指Offer51-把字符串转换成整数(记忆)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
牛客网的题目描述不能看,看不懂,直接看LeetCode的吧。
根据上面的描述,我们大概有了几点思路:

  1. 开头空格要去掉
  2. 正负号要判断一下
  3. 第一个非空字符必须是数字/正负号
  4. 要限制数字大小
  5. 前面的判断完后,尾部还要进行判断,比如前面是数字,后面突然出现其他符号,后面的全部丢掉不看了。(剑指Offer直接return 0,但是LeetCode会让返回前面已有的数据)

所以我们写出了代码,不难。但要注意剑指Offer和LeetCode中的不同点在哪:

# -*- coding:utf-8 -*-
class Solution:
    def StrToInt(self, s):
        # write code here
        i = 0
        flag = 1  # 默认为正数1,负数为-1,最后可以直接和res相乘
        res = 0  # 转换后的结果
        
        INT_MAX = 2**31  # LeetCode和剑指Offer在这里也是不一样的
        INT_MIN = -(2**31)-1
        
        s = s.lstrip()  # strip经常用,加个l,就是去掉左边的多余空格
        if len(s) == 0:
            return 0
        
        if s[i] == '+':
            i += 1
        elif s[i] == '-':
            flag = -1
            i += 1
        
        for item in s[i:]:
            if '0' <= item <= '9':
                res = res * 10 + (ord(item) - ord('0'))
                # ord函数将字符变成十进制数,与'0'的十进制的差值即为这个数字本身
                # 这里用哈希表或者列表的index来确定数字是多少也可以
            else:
                return 0  # LeetCode中换成break即可
                
        res = flag*res
        if INT_MIN <= res <= INT_MAX:
            return res
        elif res > INT_MAX:
            return INT_MAX
        else:
            return INT_MIN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xu_Wave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值