Algorithm problem - String to Integer

description

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 size of the environment can store 32-bit signed integer, then the value range of [-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 as a negative number and all the numbers appear in a row behind the combine, 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).

answer

var myAtoi = function(str) {
    str = str.trim()
    if(!/^[+|-]?\d+/.test(str)) return 0
    let val = parseInt(str.match(/^[+|-]?\d+/))
    const min = -Math.pow(2, 31)
    const max = -min - 1
    return Math.max(Math.min(val, max), min)
};

analysis

Time complexity: O (n)

Guess you like

Origin www.cnblogs.com/zhoulixiangblog/p/12057406.html