- 题目描述:
图片说明
- 题目链接:

https://www.nowcoder.com/practice/44d8c152c38f43a1b10e168018dcc13f?tpId=117&&tqId=37754&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking
- 设计思想:
图片说明

-视频讲解链接B站视频讲解
- 复杂度分析:
图片说明
- 代码:
c++版本:

class Solution {
public:
    int atoi(const char *str) {
        if(str == nullptr) return 0;//空串
        int len = strlen(str);//求出字符串长度
        int i = 0;
        //消除前导空格.
        while(i < len){
            if(str[i] != ' ') break;
            i ++;
        }
        //特别判断符号
        int flag = 1;//为1代表是正数,-1代表负数
        if(str[i] =='-') {flag = -1;i ++;}
        else if(str[i] =='+') i ++;
        int num = 0;//数字
        for(;i < len;i ++){
            if(str[i] < '0' || str[i] > '9') break;//非数字
            //超过int最大值或最小值
            if((num > INT_MAX / 10) || (num  == INT_MAX / 10 && str[i] > '7'))
                return flag == 1 ?INT_MAX : INT_MIN;
            num = num * 10 + (str[i] - '0');
        }
        return num * flag;
    }
};

Java版本:

import java.util.*;


public class Solution {
    /**
     * 
     * @param str string字符串 
     * @return int整型
     */
    public int atoi (String str) {
        // write code here
        int len = str.length();
        if(len == 0) return 0;
        int i = 0;
        //消除前导空格.
        while(i < len){
            if(str.charAt(i) != ' ') break;
            i ++;
        }
        //特别判断符号
        int flag = 1;//为1代表是正数,-1代表负数
        if(str.charAt(i) =='-') {flag = -1;i ++;}
        else if(str.charAt(i) =='+') i ++;
        int num = 0;//数字
        for(;i < len;i ++){
            if(str.charAt(i) < '0' || str.charAt(i) > '9') break;//非数字
            //超过int最大值或最小值
            if((num > Integer.MAX_VALUE / 10) || (num  == Integer.MAX_VALUE / 10 && str.charAt(i) > '7'))
                return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            num = num * 10 + (str.charAt(i) - '0');
        }
        return num * flag;
    }
}

Python版本:

#
# 
# @param str string字符串 
# @return int整型
#
class Solution:
    def atoi(self , str ):
        # write code here
        length = len(str)
        if length == 0 : return 0
        intMax=2147483647#int 最大值
        intMin=-2147483648#int 最小值
        if len == 0 : return 0
        i = 0
        #消除前导空格.
        while i < length:
            if str[i] != ' ' : break
            i += 1
        #特别判断符号
        flag = 1#为1代表是正数,-1代表负数
        if(str[i] == '-'):
            flag = -1
            i += 1
        elif(str[i] =='+'):i += 1
        num = 0#数字
        for j in range(i,length):
            if (str[j] < '0' or str[j] > '9'): break#非数字
             #超过int最大值或最小值
            if((num > intMax // 10) or (num  == intMax // 10 and str[j] > '7')):
                return intMax if flag == 1 else intMin
            num = num * 10 + (ord(str[j])- ord('0'))
        return num * flag

JavaScript版本:

/**
  * 
  * @param str string字符串 
  * @return int整型
  */
function atoi( str ) {
    // write code here
        let len = str.length;
        let intMax=2147483647;//int 最大值
        let intMin=-2147483648;//int 最小值
        if(len == 0) return 0;
        let i = 0;
        //消除前导空格.
        while(i < len){
            if(str[i] != ' ') break;
            i ++;
        }
        //特别判断符号
        let flag = 1;//为1代表是正数,-1代表负数
        if(str[i] =='-') {flag = -1;i ++;}
        else if(str[i] =='+') i ++;
        let num = 0;//数字
        for(;i < len;i ++){
            if(str[i] < '0' || str[i] > '9') break;//非数字
            //超过int最大值或最小值
            if((num > parseInt(intMax / 10)) || (num  == parseInt(intMax / 10) && str[i] > '7'))
                return flag == 1 ? intMax : intMin;
            num = num * 10 + (str[i] - '0');
        }
        return num * flag;
}
module.exports = {
    atoi : atoi
};