Entero de conversión de cadenas (atoi) JAVA

Implemente una función atoi para convertir una cadena en un número entero.

Primero, la función descarta los espacios iniciales inútiles según sea necesario, hasta que encuentra el primer carácter sin espacio. Las siguientes reglas de conversión son las siguientes:

Si el primer carácter que no está en blanco es un signo positivo o negativo, combine este signo con tantos caracteres numéricos consecutivos como sea posible después de él para formar un entero con signo.
Si el primer carácter que no está en blanco es un número, se combina directamente con los siguientes caracteres numéricos consecutivos para formar un número entero.
La cadena puede tener caracteres adicionales después de la parte entera válida, por lo que estos caracteres se pueden ignorar y no deberían afectar la función.

Nota: Si el primer carácter que no es un espacio en la cadena no es un carácter entero válido, la cadena está vacía o la cadena contiene solo caracteres en blanco, no es necesario convertir su función, es decir, no se puede convertir de manera efectiva.

En cualquier caso, si la función no puede realizar una conversión válida, devuelva 0.

rápido:

本题中的空白字符只包括空格字符 ' ' 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

Inserte la descripción de la imagen aquí
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/string-to-integer-atoi

Idea:
Dada una cadena, debemos juzgar si se puede convertir en un entero con signo, pero existen los siguientes requisitos:

1.第一位为字母的直接return 0;
2.开始遍历数字后一旦遇到字母或者加减符号,直接退出循环;
3.如果数字大于Integer.MAX_VALUE,则直接返回Integer.MAX_VALUE;
4.如果数字大于Integer.MIN_VALUE,则直接返回Integer.MIN_VALUE;
5.为了更方便的的判断,我们要用trim()函数去掉左右两端的多余空格;

Código

class Solution {
    
    
    public int myAtoi(String str) {
    
    
        String res=str.trim();
        if(res.length()==0)
        return 0;  //处理为空的情况    
        //这里就是对于上面的第一种情况,第一位为字母的直接return 0;
        if((res.charAt(0)<'0'||res.charAt(0)>'9')&&(res.charAt(0)!='+'&&res.charAt(0)!='-'))  
        return 0;
         String ans="";//存储最后的答案
		//判断是否有符号,这里也会有+123这种情况
        if(res.charAt(0)=='-'||res.charAt(0)=='+'){
    
    
            ans+=res.charAt(0);
        for(int i=1;i<res.length();i++){
    
    
       		//是数字就添加
      		  if(res.charAt(i)>='0'&&res.charAt(i)<='9'){
    
    
                    ans+=res.charAt(i);
           			//我是直接取绝对值看是否超过Integer.MAX_VALUE再判断符号,
           			if(Math.abs(Long.parseLong(ans))>Integer.MAX_VALUE){
    
    
                    if(res.charAt(0)=='-')
                    return Integer.MIN_VALUE;
                    else return Integer.MAX_VALUE;
                    }
                }
                //不是符合直接退出
                else{
    
    
                    break;
                }
        }
        }
        //当第一位不是符号的时候
        else if((res.charAt(0)>='0'&&res.charAt(0)<='9')){
    
    
             
            for(int i=0;i<res.length();i++){
    
    
                if(res.charAt(i)>='0'&&res.charAt(i)<='9'){
    
    
                    ans+=res.charAt(i);
                    if(Long.parseLong(ans)>Integer.MAX_VALUE)
                    return Integer.MAX_VALUE;
                }
                else{
    
    
                    break;
                }
            }
        }
       //如果最后ans只有一位且为符号的时候,特殊情况
        if(ans.length()<=1&&(ans.contains("-")||ans.contains("+")))
       
        return 0;
        return Integer.parseInt(ans);
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_44844588/article/details/108139207
Recomendado
Clasificación