leetcode0008字符串转换整数 (atoi)

前期回顾

今天又刷了一波leetcode
配合博客与GitHub记录自己的解题之路
具体代码可以在GitHub中git clone下来自己提交
GitHub地址(持续更新,欢迎star)
前面的刷题详见博客

LeetCode0001.两数之和

LeetCode0002两数相加

LeetCode0003无重复字符的最长子串

leetcode0004寻找两个有序数组的中位数

LeetCode0005最长回文子串


leetcode0006Z 字形变换

LeetCode0007整数反转
题目描述

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

python3解法

  • 解法1
class Solution:
    def myAtoi(self, s: str) -> int:
        return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)

在这里插入图片描述

  • 解法2
class Solution:
    def myAtoi(self, str: str) -> int:
        sign=1
        str=str.strip()
        if not str:
            return 0
        if str[0]=="+" or str[0]=="-":
            if str[0]=="-":
                sign=-1
            str=str[1:]
        ans=0
        for i in str:
            if i.isdigit():
                ans=ans*10+int(i)
            else:
                break
        ans*=sign
        if ans>2147483647:
            return 2147483647
        elif ans<-2147483648:
            return -2147483648
        else:
            return ans
  • 解法3
import re
class Solution:
    def myAtoi(self, s: str) -> int:
        if not s or s == '' or s.strip() == '':return 0
        s = s.strip()
        pattern = re.compile(u"^[-,+]?\d+")
        ret = pattern.findall(s)
        if len(ret)==0:return 0
        if len(ret)==1:
            if int(ret[0]) < -2 ** 31:
                return -2 ** 31
            if int(ret[0]) > 2 ** 31 - 1:
                return 2 ** 31 - 1
            return int(ret[0])

C++解法

class Solution {
public:
    int myAtoi(string str) {
        long result = 0;
        bool isUint = true;
        bool isStart = true;
        for (int i =0; i < str.size(); ++i) {
            if (str[i] == ' ' && isStart) {
                continue;
            } else if (str[i] == '-' && isStart) {
                isStart = false;
                isUint = false;                
            } else if (str[i] == '+' && isStart) {
                isStart = false;
                isUint = true;                
            }else if (str[i] >='0' && str[i] <='9') {
                isStart = false;
                result = result*10 + (str[i]-'0');
                if (result != (int)result){
                    if (isUint) {
                        return INT_MAX ;
                    } else {
                        return INT_MIN ;
                    }
                }
            } else {
                break;
            }
        }
        if (!isUint) {
            result = 0-result;
        }

        return result;
    }
};

在这里插入图片描述

JavaScript解法

var myAtoi = function(str) {
    str = str.trim()
    var num = parseInt(str, 10)
    if (num > Math.pow(2, 31) -1) {
        return  Math.pow(2, 31) -1
    }
    if (num < -Math.pow(2, 31)) {
        return -Math.pow(2, 31)
    }
    return isNaN(num) ? 0 : num 
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值