请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

函数 myAtoi(string s) 的算法如下:

  1. 空格:读入字符串并丢弃无用的前导空格(" "
  2. 符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。
  3. 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
  4. 舍入:如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1 。

返回整数作为最终结果。

注意特殊情况 比如+后面仍然是非数字字符咋办 比如+后面没有任何字符是空的咋办 考虑代码健壮性

写出来倒是不难 就是要注意lstrip的使用与字符串的更新

class Solution(object):

    def myAtoi(self, s):

        s=s.lstrip()#丢弃左侧的指定字符

        if not s:

            return 0

        sign = s[0]

        if sign=='+' or sign=='-':

            s=s[1:]

        if not  s :

            return 0

        if not s[0].isdigit():

            return 0

        result1=s.lstrip('0')#丢掉左边的

        result2=''

        for i in result1:

            if not i.isdigit():

                break

            result2+=i#这是得到了直到出现非数字字符之前的字符串

        if not result2:

                return 0#意思是全是0了或者第一个就是非数字字符返回字符0

        if sign in '+-':

           result2=sign+result2

        result2=int(result2)

        if result2 <-pow(2,31):

            return -pow(2,31)

        elif result2>pow(2,31)-1:

            return pow(2,31)-1

        else:

            return result2

solution=Solution()

result=solution.myAtoi(" +")

print(result)

这个题目蛮好蛮有意思的 静下心来好好分析 但是我这个貌似很耗内存呢 有没有大佬指导一下好的且简单易懂的方法

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐