题目
思路分析
题目要求:抽取字符串前的数字
- 一直找到第一个非空字符
- 判断提取出来的数字符号
- 将数字提取
- 判断数字范围
在提交代码的过程中还会有许多小问题,意义改进即可
代码展示
class Solution:
def is_number(self,s): #百度出来的 判断字符是否是数字的函数
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
def myAtoi(self, str: str) -> int: #主函数
#
i=0
while i<len(str) and str[i]==' ': #找到第一个非空字符
i+=1
flag=True
if i<len(str) and str[i]=='-': #如果第一个非空字符是‘-’,进行标记False
i+=1
if i<len(str) and str[i]=='+': # 不允许连续出现‘-+’,否则return 0
return 0
flag=False
if i<len(str) and str[i]=='+': #如果第一个非空字符是‘+’,进行标记
i+=1
flag=True
num=0
while i<len(str) and self.is_number(str[i]): #判断当前字符是数字
num*=10
num+=int(str[i])
print(i,num)
i+=1
if flag==False:
num=-num
if num<=-2**31:
num=-2**31
if num>=2**31-1:
num=2**31-1
return num
if __name__ == "__main__":
print("yes1")
a = Solution()
print(a.myAtoi("-+1"))
print("yes2")