Encuentra el número 1 en una secuencia binaria

Al escribir leetcode, me he encontrado con varios problemas que necesitan encontrar rápidamente el número 1 en una secuencia binaria, así que aquí hay un resumen de varios métodos.

Enlaces a temas típicos

Juicio bit a bit

Esta es la forma más sencilla e intuitiva de determinar si cada dígito de un número entero es 1 a su vez.

Juzgar el primer bit: n & 1
Juzgar el segundo bit: n & (1 << 1)
Juzgar el enésimo bit: n & (1 << (n-1))

class Solution {
    
    
public:
    int hammingWeight(uint32_t n) {
    
    
        int ret = 0;
        for (int i = 0; i < 32; i ++) {
    
    
            if (n & (1 << i)) {
    
    
                ret ++;
            }
        }
        return ret;
    }
};

Método de acceso directo: N & (N-1)

El uso de este método se basa en el hecho:

一个数 n 与一个比它小 1 的数(n−1)进行与运算(&)之后,得到的结果会消除 n 中最低位的 1

Por ejemplo:
7 y 6
00111 y 00110 = 00110

Puede verse que el resultado de n & (n − 1) es el valor después de reemplazar el bit más bajo de n con 0.

Este algoritmo se usa para eliminar 1 cada vez, y el contador es +1 cada vez hasta que n es 0.

class Solution {
    
    
public:
    int hammingWeight(uint32_t n) {
    
    
        int res = 0;
		while (n) {
    
    
			n = n&(n - 1);
			res++;
		}
		return res;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_45605341/article/details/108033301
Recomendado
Clasificación