Ejercicio de uso de puntero rápido y lento LeetCode: 202. Happy Tree

Método: utilice la idea de "puntero rápido y lento" para encontrar el ciclo: "puntero rápido" da dos pasos a la vez y "puntero lento" da un paso a la vez. Cuando los dos son iguales, es un ciclo. En este punto, juzgue si es un ciclo causado por 1, si es así, es un número feliz, de lo contrario no es un número feliz.

 

Escribe un algoritmo para determinar si un número es un "número feliz".

Un "número feliz" se define como: Para un número entero positivo, cada vez que el número se reemplaza por la suma de los cuadrados de los números en cada posición, y luego este proceso se repite hasta que el número se convierte en 1, o puede ser un bucle infinito pero siempre cambia Menos de 1. Si se puede cambiar a 1, entonces este número es un número feliz.

Ejemplo: 

Entrada: 19
Salida: verdadera
Explicación: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

Participa el código

class Solution {
public:
    int bitSquareSum(int n) {
        int sum = 0;
        while(n > 0)
        {
            int bit = n % 10;
            sum += bit * bit;
            n = n / 10;
        }
        return sum;
    }
    
    bool isHappy(int n) {
        int slow = n, fast = n;
        while(slow != 1){
            slow = bitSquareSum(slow);
            fast = bitSquareSum(fast);
            fast = bitSquareSum(fast);
            if ( slow == fast) break;
        }
        return slow == 1;
    }
};

 

Supongo que te gusta

Origin blog.csdn.net/qq_40513792/article/details/104289048
Recomendado
Clasificación