[Inscripción] -leetcode cadena de conversión número entero

conversión de cadenas de enteros: Título

 

Atoi a implementar una función, que puede convertir una cadena a un entero.

En primer lugar, la función se basa en los descartes deben comenzar con un carácter de espacio inútil hasta que el hallazgo al primer carácter no-espacio hasta ahora. Las siguientes reglas de conversión son como sigue:

  1. Si el primer carácter es un positivo no nulo o número negativo, la señal de la vuelta con tantos caracteres numéricos consecutivos se combinan para formar un entero con signo.
  2. Si el primer carácter no-espacio es un número, que es directamente después de los caracteres numéricos continuos se combinan para formar un entero.
  3. La cadena también puede existir después de la parte entera de los caracteres adicionales eficaces, estos caracteres pueden ser ignorados, no deben afectar a la función.

Nota: Cuando la cadena si el primer carácter que no sea espacio no es una cadena de caracteres entero válido está vacío o contiene sólo la cadena de caracteres de espacio en blanco, la función no requiere que usted para convertir esa conversión no puede ser eficaz.

En cualquier caso, si la función no puede convertir de manera efectiva, se devuelve 0.

consejos:

Esta pregunta caracteres en blanco se incluyen sólo el carácter de espacio ''.
Suponemos que el entorno puede almacenar 32 bits tamaño entero con signo, entonces el rango numérico [-2 31 es 2 31 es  - 1] Si el valor excede este rango, volver INT_MAX (2 31 es  -. 1) o INT_MIN (-2 31 es ).
 

Ejemplo 1:

De entrada: "42"
de la salida: 42


Ejemplo 2:

De entrada: "-42"
de salida: -42
Explicación: un primer caracter no blanco '-', es un signo negativo.
  Vamos a todos los digitales número negativo consecutivo y más tarde se combina tanto como sea posible, y, finalmente, conseguir -42.


Ejemplo 3:

De entrada: "4193 con las palabras"
de la salida: 4193
Explicación: convertir el apagado digital de '3', debido a que el siguiente carácter no es numérico.


Ejemplo 4:

De entrada: "palabras y 987"
de salida: 0
Explicación: una primera de carácter no en blanco 'w', pero no es un número positivo o número negativo.
Por lo tanto, la conversión no se puede realizar de manera eficaz.


Ejemplo 5:

De entrada: "-91,283,472,332"
Salida: -2147483648
explicación: el número "-91,283,472,332" Por encima del rango de número entero con signo de 32 bits.
  De acuerdo con ello volver INT_MIN (-2 31 es ).


Las preguntas fueron muy claro vamos a convertir una cadena a un entero.

La dificultad es que excede la gama de plástico.

 

Nos dividimos en más o menos los pasos siguientes para resolver este problema por carretera:

  1. Omitir espacios inútiles
  2. símbolo juez
  3. El procesamiento digital

Al tratar con los números, es necesario determinar si el número entero número entero más allá del alcance:

  • ans * 10 + v> INT_MAX

Sin embargo, la expresión de la izquierda y de la * 10 + v es también probable que sea mayor que el rango de números enteros, por lo que tomamos la variante apropiada:

  • ans> (INT_MAX - v) / 10

Por lo tanto, se puede determinar sin apartarse del alcance de la conformación.

 

Los códigos (C ++):

clase Solution {
 público :
     int myAtoi ( Cadena STR) {
         int i = 0 , signo = 1. ;
         int ANS = 0 ; 

        // omitir espacios 
        al mismo tiempo (STR [I] == '  ' ) ++ I; 

        // símbolos procesados 
        IF (STR [I] == ' - ' ) = Sign - 1. ;
         IF (STR [I] == ' + ' || STR [I] == ' - ' ) I ++ ; 

        //处理数字
        mientras (str [i]> = ' 0 ' && str [i] <= ' 9 ' ) {
             int v = str [i] - ' 0 ' ;
            si (American National Standard> (INT_MAX - v) / 10 ) de retorno signo == 1 ? INT_MAX: INT_MIN; 
            ans = ans * 10 + v; 
            i ++ ; 
        } 

        Retorno signo * ans; 
    } 
};

2020-04-03-19: 48: 59

 

Supongo que te gusta

Origin www.cnblogs.com/Sxccz/p/leetcode_14.html
Recomendado
Clasificación