693. Números binarios de bits alternativos (operaciones bit a bit: bit a bit AND &, XOR)

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

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= 1
    • 110 & 1= 0
  • Resumen: Bitwise AND se usa para determinar si el último bit es 0还是1
  • 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 nla desplaza un bit a la derecha, el número resultante se XOR con nel OR bit a bit a. Si y solo si la entrada nes un número binario de bits alternativos, ala representación binaria es todo 1(excluyendo el inicial 0). Aquí hay una prueba simple: acuando un bit de 1es , si y solo si nel bit correspondiente es diferente de su bit anterior. aCuando cada bit de 1es , si y solo nsi todos los bits adyacentes de son diferentes, es nun número binario de bits alternos.
  • Bitwise Y el y si y solo si la representación abinaria 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 + 1a10a1a + 10010

ACcó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 / 2que
    • operador de turnos =parseInt(n / 2)

Supongo que te gusta

Origin juejin.im/post/7080161038393409544
Recomendado
Clasificación