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

题目描述:

剑指 Offer 67. 把字符串转换成整数python_第1张图片

 剑指 Offer 67. 把字符串转换成整数python_第2张图片

题解:

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

 

 

你可能感兴趣的:(剑指offer,leetcode字符串,python,开发语言,后端)