剑指 Offer 67. 把字符串转换成整数python

题目描述:

 

题解:

1.去除str多余空格。

2.首先判断str[0]弟一个字符是否合法,如果str[0]是数字,正负号,则合法,否则直接返回0.

3.flag记录数字正负,1为正,-1为负,zero_nums记录之前是否出现过非0数字,用于去掉多余先导0。

4.从下标1开始对str遍历,将所有数字保存在nums数组中,如果str[i]出现小数点或字母,i位置之后的数字都视为无效。

5.先将nums中保存的数字转为字符串形式判断是否超界,如果没有则将其转为整型数字并返回。

class Solution:
    def strToInt(self, str: str) -> int:
        str = str.strip()
        if len(str) == 0:
            return 0
        flag = 0
        nums = []
        zero_flag = 0
        if str[0] >= '0' and str[0] <= '9':
            nums.append(str[0])
            if str[0] != '0':
                zero_flag = 1
        if (str[0] >= '0' and str[0] <= '9') or str[0] == '+':
            flag = 1
        elif str[0] == '-':
            flag = -1
        else:
            return 0
        for i in range(1, len(str)):
            if str[i] >= '0' and str[i] <= '9':
                if str[i] != '0':
                    nums.append(str[i])
                    zero_flag = 1
                if str[i] == '0' and zero_flag == 1:
                    nums.append(str[i])
            else:
                break
        numstr = "".join(nums)
        if flag == 1 and (len(numstr) > 10 or (len(numstr) == 10 and numstr >= "2147483647")):
            return 2147483647
        elif flag == -1 and (len(numstr) > 10 or (len(numstr) == 10 and numstr >= "2147483648")):
            return -2147483648
        mul = 1
        result = 0
        for i in range(len(nums) - 1, -1, -1):
            result = result + int(nums[i]) * mul
            mul = mul * 10
        if flag == -1:
            result = -result
        return result

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值