leetcode探索之旅2(91)-8string to integer

今天继续刷LeetCode,第8题,将字符串转化为整数

分析:主要考虑多种情况
1、前面存在多个空格的情况;
2、正负号的识别;
3、末尾不是数字的情况;
4、整数的大小超过(-2^31 2^31-1);

问题:
1、Python中正则化的使用;

附上C++代码:

class Solution {
public:
    int myAtoi(string str) {
        int flag=1;
        int i=0;
        while(str[i]==' ')
        {
            i++;
        }
        if(str[i]=='+')
        {
            flag=1;
            i++;
        }
        else if(str[i]=='-')
        {
            flag=-1;
            i++;
        }
        long long s=0;
        while(str[i]!='\0')
        {
            if('0'<=str[i]&&str[i]<='9')
            {
                s=s*10+(str[i]-'0');
                if(s>INT_MAX)
                {
                    if(flag==1)
                        return INT_MAX;
                    else
                        return INT_MIN;
                }
                i++;
            }
            else
                break;
        }
        s=s*flag;
        return s;
    }
};

附上Python代码1:

class Solution:
    def myAtoi(self, str: str) -> int:
        s=0
        j=0
        flag=1
        while j<len(str):
            if str[j]==' ':
                j+=1
            else:
                break
        if str[j]=='+':
            flag=1
            j+=1
        elif str[j]=='-':
            flag=-1
            j+=1
        while j<len(str):
            if str[j]>='0' and str[j]<='9':
                s=s*10+int(str[j])
                if s>2**31:
                    if flag==1:
                        return 2**31-1
                    else:
                        return -2**31
                j+=1
            else:
                break
        return s*flag

附上Python代码2:

class Solution:
    def myAtoi(self, str: str) -> int:
        import re
        res=re.findall(r'^[\+\-]?\d+',str.strip())
        if res!=[]:
            if int(res[0])>(2**31-1):
                return 2**31-1
            elif int(res[0])<(-2**31):
                return -2**31
            else:
                return int(res[0])
        else:
            return 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值