题目描述:
https://leetcode-cn.com/problems/string-to-integer-atoi/
题解:
提取输入字符串中的合法数字,字符串s可能出现的元素有:
数字,空格,正号,负号,其他字符等
对第二次出现的空格段,正负号,和所有其他字符及其之后的字符进行摒弃。
<1>对s中每个元素进行判断,将合法的数字加入nums,需要注意处理特殊情况。 利用end记录是否已经读取到数字,初始化为0,读取过正负符号或数字后设end =1,如果end ==1且s[i]不是数字说明读取到数字后的非法字符,则结束,摒弃剩余部分。 flag记录数字正负,flag=1为正,flag=0为负,初始化为1 flagg=0判断是否是第一次读取到空格,如果flagg=1时再次读取到空格,也摒弃剩余部分。 <2>将nums中的数值转化为整数res 判断是否超出边界值,超出则截断。 def myAtoi(self, s): lens = len(s) flag = 1 flagg = 0 end = 0 nums = [] for i in range(lens): if s[i]==' ' and end ==0 : flagg = 1 continue elif s[i]=='-' and end ==0: end = 1 flag = 0 elif s[i]=='+' and end==0: end = 1 flag = 1 elif s[i] >='0' and s[i]<='9': nums.append(int(s[i])) end = 1 elif s[i]<'0' or s[i]>'9': if end == 1 or i==0 or flagg==1: break if len(nums)==0: return 0 weight = 1 res = 0 for i in range(len(nums)-1, -1, -1): res = res+nums[i]*weight weight=weight*10 if flag ==0: res = -res if res > 2**31-1: res = 2**31-1 if res < -2**31: res= -2**31 return res s = " b11228552307" print(myAtoi(s))