Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para verdetalles de la actividad。
El día 75 de cepillado diario 2021.03.28
693. Números binarios de bits alternativos
- Enlace del título original de leetcode:leetcode-cn.com/problems/bi…
- Dificultad: fácil
- Método: operaciones bit a bit
Tema Descripción
- Dado un entero positivo, compruebe que su representación binaria siempre alterna 0 y 1: en otras palabras, los dos dígitos adyacentes en la representación binaria nunca son iguales.
Ejemplo
- Ejemplo 1
输入: n = 5
输出: true
解释: 5 的二进制表示是:101
复制代码
- Ejemplo 2
输入: n = 7
输出: false
解释: 7 的二进制表示是:111.
复制代码
Ideas para resolver problemas
temas similares
simulación regular
- Después de convertir el número decimal actual en un número binario, separe el último dígito y el dígito anterior para comparar. Si los dos bits son siempre iguales, es el número binario de bit alternativo coincidente y regresa
true
; de lo contrario, regresa directamentefalse
- La idea original: la operación módulo obtiene el último dígito, y no se comparan dos dígitos como grupo, si hay un grupo que no cumple con los requisitos, devuelve
false
, de lo contrario, si no encuentra incompatibilidad, devuelvetrue
- Entonces solo necesita usar el operador XOR para determinar si coincide
- XOR, 1
- mismo XOR, 0
post-optimización
- Cada vez que obtiene el valor del último dígito (
0或者1
), no necesita usar la operación de módulo, puede usar&
la operación AND bit a bit - Ejemplo:
111 & 1
= 1110 & 1
= 0
- Resumen: Bitwise AND se usa para determinar si el último bit es
0还是1
sí - En términos de velocidad de operación, la operación de bit es mejor que la operación de módulo.
Otro método bit a bit
- Después de que
n
la desplaza un bit a la derecha, el número resultante se XOR conn
el OR bit a bita
. Si y solo si la entradan
es un número binario de bits alternativos,a
la representación binaria es todo1
(excluyendo el inicial0
). Aquí hay una prueba simple:a
cuando un bit de1
es , si y solo sin
el bit correspondiente es diferente de su bit anterior.a
Cuando cada bit de1
es , si y solon
si todos los bits adyacentes de son diferentes, esn
un número binario de bits alternos. - Bitwise Y el y si y solo si la representación
a
binaria de es todo , el resultado es . Aquí hay una prueba simple: si y solo si la representación binaria de es todo , puede llevar a cabo, y la posición más alta original es , y el resultado de AND bit a bit es . De lo contrario, no se generará ningún acarreo, los dos bits más significativos son ambos y la fase y el resultado no lo son . Combinando los dos pasos anteriores, se puede juzgar si la entrada es un número binario de bit alternativo.a + 1
a
1
0
a
1
a + 1
0
0
1
0
AC
código
var hasAlternatingBits = function(n) {
let contra = n % 2;
n = n >> 1;
while(n) {
let wei = n % 2;
if(!((wei) ^ contra)){
return false;
}
// console.log('contra:', contra)
contra = wei;
n = n >> 1;
}
return true;
};
复制代码
Nueva solución de operación de bit
var hasAlternatingBits = function(n) {
const a = n ^ (n >> 1);
return (a & (a + 1)) === 0;
};
复制代码
Resumir
- Los operadores de turnos son inherentemente más rápidos
n / 2
que- operador de turnos =
parseInt(n / 2)
- operador de turnos =