Question 8 LeetCode convert a string integer

topic:

Atoi you to implement a function, it can convert a string to an integer.

First, the function will begin with a space character discard useless if necessary, until the find to the first non-space character so far.

When we find the first non-space character is a positive or negative number, the combination of the symbols as much as possible with consecutive numbers up later, as the sign of integer; if the first non-space character is figures, which directly after the continuous numeric characters are combined to form an integer.

In addition to the string after a valid integer part may also exist extra characters, these characters can be ignored, they should not affect a function.

Note: if the character string in the first non-space character is not a valid integer character string is empty or contains only white space character string, then you will not need to be a function of conversion.

In any case, if the function can not effectively convert, 0 is returned.

Description:

We assume that the environment can store 32-bit signed integer size, then the numerical range [-231 231--1]. If the value exceeds this range, return INT_MAX (231 - 1) or INT_MIN (-231).

Test Case

Example 1:

Input: "42"
Output: 42
Example 2:

Input: "-42"
Output: -42
Explanation: a first non-blank character '-', it is a negative sign.
We will all digital consecutive negative number and later combined as much as possible, and finally get -42.
Example 3:

Input: "4193 with words"
Output: 4193
Explanation: converting the digital OFF '3', because the next character is not numeric.
Example 4:

Input: "words and 987"
Output: 0
Explanation: a first non-blank character 'w', but it is not a positive number or negative number.
Therefore, the conversion can not be performed effectively.
Example 5:

Input: "-91283472332"
Output: -2147483648
explanation: the number "-91283472332" Over the range of 32-bit signed integer.
So return INT_MIN (-231).

Code:

class Solution {
    public int myAtoi(String str) {
        str=str.trim();//去除空格
        if(str==null || str.length()==0) return 0;//如果str为空或者长度为0就直接返回0
        char fristChar=str.charAt(0);
        int start=0;//指针指向str的开始
        int sign=1;//记录正负号
        long res=0;//用于存整形
        if(fristChar=='+'){
            sign=1;
            start++;
            
        }//如果为+就将sign记录为1,并将start向后走一位
        if(fristChar=='-'){
            sign=-1;
            start++;
            
        }//如果为-就将sign记录为-1,并将start向后走一位
        for (int i = start; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return (int) res * sign;
            }
            res=res*10+str.charAt(i)-'0';//-‘0’ 的意思是将字符串数字变为long型的数字,查一下ASCII表就理解了
            if(sign==1&&res>Integer.MAX_VALUE)
                return Integer.MAX_VALUE;//如果超出了Interger的最大值则返回Interger的MAX_
            if(sign==-1&&res>Integer.MAX_VALUE)
                return Integer.MIN_VALUE;////如果超出了Interger的最小值则返回Interger的MIN
            
        }
        return (int) res*sign;
    }
}
Published 63 original articles · won praise 12 · views 4080

Guess you like

Origin blog.csdn.net/qq_45353823/article/details/100767763