当前位置: 首页 > 科技观察

一篇关于学习将字符串转换为整数的文章(Atoi)

时间:2023-03-16 23:38:20 科技观察

1。描述一个funcmyAtoi(_str:String)->Int函数的实现,它将字符串转换为32位有符号整数(类似于C/C++中的atoi函数)。函数funcmyAtoi(_str:String)->Int的算法如下:读取字符串并丢弃无用的前导空格检查下一个字符(假设尚未到达字符末尾)是加号还是减号,读取字符(如果有)。确定最终结果是负数还是正数。如果两者都不存在,则假定结果为阳性。读入下一个字符,直到到达下一个非数字字符或到达输入末尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即??“123”->123,“0032”->32)。如果没有读取数字,则整数为0。如有必要,更改符号(从第2步开始)。如果整数个数超过32位有符号整数范围[?2^31,2^31?1],整数需要被截断以保持在这个范围内。具体来说,小于?2^31的整数应该固定为?2^31,大于2^31的整数?1应该固定为2^31吗?1.返回一个整数作为最终结果。注意:本题中的空白字符只包括空格字符''。不要省略除前导空格或数字后字符串的其余部分以外的任何字符。2.示例示例1输入:str="42"输出:42解释:粗体字串是已经读过的字符,脱字符是当前正在读的字符。第1步:“42”(当前未读取任何字符,因为没有前导空格)^第2步:“42”(当前未读取任何字符,因为没有“-”或“+”)^第3步:“42"(读入"42")^解析得到整数42。由于"42"在[-231,231-1]范围内,所以最终结果为42。示例2输入:str="-42"输出:-42解释:第1步:"-42"(读取前导空格,但忽略它们)^第2步:"-42"(读取'-'字符,所以结果应该是负数)^第3步:“-42”(读入“42”)^解析得到整数-42。由于“-42”在[-231,231-1]范围内,所以最终结果为-42。例3输入:str="4193withwords"输出:4193解释:第1步:"4193withwords"(当前没有读取任何字符,因为没有前导空格)^第2步:"4193withwords"(当前没有读取任何字符,因为这里有没有'-'或'+')^步骤3:"4193withwords"(读取"4193";因为下一个字符不是数字,读取停止)^解析得到整数4193。因为"4193"在范围[-231,231-1],最终结果为4193。示例4输入:str="wordsand987"输出:0解释:第1步:“wordsand987”(当前没有读取任何字符,因为没有前导空格)^step2:"wordsand987"(当前没有字符被读取,因为这里没有'-'或'+')^步骤3:"wordsand987"(读取停止,因为当前字符'w'不是数字)^解析返回整数0,因为没有读取任何数字。由于0在[-231,231-1]范围内,所以最终结果为0。示例5输入:str="-91283472332"输出:-2147483648解释:第1步:"-91283472332"(当前没有字符被读入,因为没有前导空格)^Step2:"-91283472332"(读取'-'字符,所以结果应该是负数)^Step3:"-91283472332"(读取"91283472332")^解析得到整数-91283472332。由于-91283472332小于范围[-231,231-1]的下限,最终结果被截断为-231=-2147483648。约束条件:0<=s.length<=200s由英文字母(大小写)、数字(0-9)、''、'+'、'-'和'.'组成3、回答classAtoi{funcmyAtoi(_str:String)->Int{varres=0,flag=1,index=0letintMax=2147483647,intMin=-2147483648,strChars=Array(str)//trimwhileindex=intMax{ifflag==1{returnintMax}elseifflag==-1&&res>intMax{returnintMin}}index+=1}returnflag*res}}主要思想:剪枝,正负,整数溢出,是字母数字时间复杂度:O(n)空间复杂度:O(1)仓库化算法解法:LeetCode-Swift[2]