010 --- buckle exercise force to convert a string to an integer

Subject description:

https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/

Write a function StrToInt, to achieve this function converts the string to an integer. You can not use atoi or other similar library functions.

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).

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).

 

Topic analysis:

Not analysis, and problem-solving ideas very clear, however, is to deal with boundary conditions need to be considered comprehensive, the reason for writing this question, because I was wrong many times. . .

Java code:

public int strToInt(String str) {
    long result = 0;
    if (str == null || str.isEmpty()) {
        return (int) result;
    }

    // 去除空格
    str = str.trim();
    if (str.isEmpty() || !(str.startsWith("+") || str.startsWith("-") || Character.isDigit(str.charAt(0)))) {
        return (int) result;
    }

    boolean isNeg = str.startsWith ( "-" );
     // find the first digit of the index is not 
    int startIndex = isNeg || str.startsWith ( "+") 1:? 0 ;
     int index = startIndex;
     the while (index <str.length () && by Character.isDigit (str.charAt (index))) {
        index++;
    }

    // 截取字符串
    str = str.substring(startIndex, index);
    int powIndex = 0;
    for (int i = str.length() - 1; i >= 0; i--) {
        if (!Character.isDigit(str.charAt(i))) {
            break;
        }

        result += Math.pow(10, powIndex++) * (str.charAt(i) - '0');
        if (isNeg && (-result) <= Integer.MIN_VALUE) {
            return Integer.MIN_VALUE;
        }
        if (!isNeg && result >= Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        }
    }

    return isNeg ? (int) (-result) : (int) result;
}

Power button and submit the results of running times:

To see how ill-considered. . .

 

 

 

Guess you like

Origin www.cnblogs.com/sniffs/p/12555486.html