LeetCode 1342. Descripción de C / C ++ doble cien eficiencia del número de operaciones que convierte un número en 0
Hola a todos, mi nombre es oficial Qi Jie (QI guān jié), poco a poco expediente del curso de aprendizaje en CSDN, las moscas de tiempo, el futuro se puede esperar, alimentando ~ dirección del blog es: el blog oficial de Qi Jie
Este artículo fue escrito originalmente por Qi Guan, por favor apóyelo ¡Algunas plataformas han estado robando artículos de blogger! ! !
Los bloggers actualmente solo escriben blogs en CSDN, la única dirección de actualización del blog es: el blog de Qi Guanjie
Titulo
Dificultad simple
Le da un número entero no negativo num
, devuelva el número de pasos necesarios para convertirlo en 0. Si el número actual es par, debe dividirlo entre 2; de lo contrario, reste 1.
Ejemplo 1:
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
Ejemplo 2
输入:num = 8
输出:4
解释:
步骤 1) 8 是偶数,除以 2 得到 4 。
步骤 2) 4 是偶数,除以 2 得到 2 。
步骤 3) 2 是偶数,除以 2 得到 1 。
步骤 4) 1 是奇数,减 1 得到 0 。
Ejemplo 3
输入:num = 123
输出:12
Consejos:
0 <= num <= 10^6
Solución
Danos un número y déjanos encontrar la cantidad de veces que se necesita para convertir este número en uno. La regla del cambio es: 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
entonces solo necesitamos un tiempo hasta que él sea 0, y luego encontrar el número de retornos. (Aquí puede usar el &
algoritmo AND para juzgar los números pares e impares . Será más rápido que la operación de módulo. Lo escribí en otro artículo. Si está interesado, puede verificarlo. La dirección del artículo es: ¿Por qué el mismo algoritmo, pero su programa? ¿Siempre hay tiempo de espera? Consejos que debes conocer para la competencia de algoritmos )
El código de solución completo es:
class Solution {
public:
int numberOfSteps (int num) {
int ans = 0;
while(num){
ans++;
if(num&1)
num--;
else
num /= 2;
}
return ans;
}
};
La eficiencia de ejecución es:
¡La eficiencia de ejecución es el doble de cien!