Directorio de artículos
Asunto: 201. Y de rango numérico bit a bit
Dado un rango [m, n], donde 0 <= m <= n <= 2147483647, devuelve el AND bit a bit de todos los números en este rango (incluidos los dos extremos de m, n).
Ejemplo 1:
输入: [5,7]
输出: 4
Ejemplo 2:
输入: [0,1]
输出: 0
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/bitwise-and-of-numbers-range Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Idea básica: el prefijo común más largo del límite
- Quite la parte no pública desplazando a la derecha y cuente el número de dígitos en la parte pública
- Mueva la parte común hacia atrás moviendo el resultado anterior a la izquierda
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
//这道题有一定的技巧性,直接进行位于运算,会导致一些测试用例运行超时
//这里转化为求m,n的最长公共前缀
int cnt = 0;
while(m < n){
m = m >> 1;
n = n >> 1;
++cnt;
}
return m << cnt;
}
};