LeetCode [7 - Inversión de enteros] LeetCode [8 - Cadena a enteros]

Inversión entera

Descripción del título

Dado un entero con signo de 32 bits, debe invertir los dígitos en cada dígito de este entero.
Inserte la descripción de la imagen aquí

Ideas para resolver problemas

Tome un bit para x% 10, el siguiente para x / 10, preste atención a cruzar el límite,

Implementación de código

class Solution {
public:
    int reverse(int x) {
        int sum = 0;
        
        while(x)
        {
            if(sum<INT_MIN/10) 
                return 0;
            if(sum>INT_MAX/10)
                return 0;
            sum=sum*10+x%10;
            x/=10;
        }
        return sum;
    }
};

Cadena a entero

Descripción del título

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

Primero, la función descarta los caracteres de espacio iniciales inútiles según sea necesario hasta que se encuentre el primer carácter no espacial.

Cuando el primer carácter no nulo que encontramos es un signo positivo o negativo, el símbolo se combina con tantos dígitos consecutivos como sea posible para ser el signo del entero; si el primer carácter no nulo es El número se combina directamente con los siguientes caracteres numéricos para formar un número entero.

Además de la parte entera válida de la cadena, puede haber caracteres adicionales, estos caracteres pueden ignorarse, no deberían afectar la función.

Nota: Si el primer carácter sin espacio en la cadena no es un carácter entero válido, la cadena está vacía o la cadena contiene solo caracteres en espacio en blanco, entonces su función no necesita ser convertida.

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

Descripción:

Suponiendo que nuestro entorno solo puede almacenar enteros con signo con un tamaño de 32 bits, el rango de valores es [−231, 231 - 1]. Si el valor excede este rango, devuelva INT_MAX (231 - 1) o INT_MIN (−231).

Ideas para resolver problemas

Primer paso

Elimine todos los espacios en la cadena y registre solo los subíndices de caracteres válidos.
Si son todos espacios, devuelva 0 directamente

int length = s.size();
int index = 0;
while(index < length)
{
	if(s[length] != ' ')
		break;
	index++;
}
if(index == length)
	return 0;

Segundo paso

Juicio de positivo y negativo, indicado por una marca, inicialmente positivo

int signal = 1;
if(s[index] = '+')
	index++;
else if(s[index] = '-')
{	
	singal = -1;
	index++;
}

El tercer paso

Conversión, primero determine si cruza el borde y luego convierta,

int res = 0; //保存结果
while(index<legnth)
{
	//1.取一个字符
	char Cur = s[index];
	//2.判断是否为数字字符
	if(Cur < '0' || Cur >'9')
		break;
	//3.判断是否越界
	if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (curChar - '0') > INT_MAX % 10)) 
	{
          return INT_MAX;
    }
    if (res < INT_MIN / 10 || (res == INT_MIN / 10 && (curChar - '0') > -(INT_MIN % 10))) 
    {
           return INT_MIN;
    }
    //4.转换
    res = res*10 + signal*(Cur - '0');
    //5.取下一个字符
    index++;
}

Implementación de código

class Solution {
public:
    int myAtoi(string str) {
        unsigned long len = str.length();

        int index = 0;
        while (index < len) {
            if (str[index] != ' ') {
                break;
            }
            index++;
        }
        //如果全部是空格,直接返回0
        if (index == len) {
            return 0;
        }

        int sign = 1;
        if (str[index] == '+') {
            index++;
        } else if (str[index] == '-') 
        {
            sign = -1;
            index++;
        }

        int res = 0;
        while (index < len) {
            char curChar = str[index];
            if (curChar < '0' || curChar > '9') {
                break;
            }

            if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (curChar - '0') > INT_MAX % 10)) {
                return INT_MAX;
            }
            if (res < INT_MIN / 10 || (res == INT_MIN / 10 && (curChar - '0') > -(INT_MIN % 10))) {
                return INT_MIN;
            }

            res = res * 10 + sign * (curChar - '0');
            index++;
        }
        return res;
    }
};
Sol
Publicado 253 artículos originales · elogiado 41 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/liuyuchen282828/article/details/104569664
Recomendado
Clasificación