Ficha en (8) acerca de la operación de bits

https://leetcode-cn.com/problems/counting-bits/solution/

Establezca el último 1 en 0: La
demostración es muy simple. Suponga que una cadena de datos es:
x = …… 1 ……,
el frente de 1 es desconocido, el reverso de 1 es todo 0, y el resultado de x- 1 es:
x -1 = …… 0 ……,
la posición del 0 es la misma que la posición del 1 anterior, el frente del 0 es el mismo que el anterior y el reverso del 0 es todo 1, por lo que al realizar operaciones bit a bit, obviamente puede encontrar que el resultado final es x El número antes del 1 en el medio no cambia, los números después de 1 se convertirán todos en 0 (incluido 1. Y
, al realizar operaciones bit a bit, el siguiente es el punto:
i & (i-1) == 0 en realidad cuéntelo primero (i- 1) === Todavía necesita atención.
Este tema sigue siendo muy interesante:
de hecho, el orden de los números está organizado artificialmente. Cuando queremos calcular el número de números en él, no necesitamos prestar atención al orden en absoluto ...
como las preguntas, el método más ingenioso de programación dinámica, es el primer lugar como expansión binaria.

class Solution {
    
    
public:
    vector<int> countBits(int num) {
    
    
        int highbit=0;
        vector<int> ans(num+1);
        for(int i=1;i<=num;i++){
    
    
            if((i&(i-1))==0){
    
    
                highbit=i;
            }
            ans[i]=ans[i-highbit]+1;
        }
        return ans;
    }
};

Este es un pequeño detalle, y hoy conozco el poder del knuth, quiero comprar un arte de programación para consagrarlo en la cabecera.

Supongo que te gusta

Origin blog.csdn.net/weixin_47741017/article/details/114305847
Recomendado
Clasificación