[Diario de cepillado] 693. Números binarios de bits alternativos

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento .

[Diario de cepillado] 693. Números binarios de bits alternativos

El artículo 16 de este diario de escritura se titula: 67. Sumatoria binaria , simple

1. Descripción del tema:

Cuando regrese del trabajo, eche un vistazo a la pregunta , escribámosla para él, mantenga un buen hábito , después de todo, ya está apurado por la tarea.

Los requisitos para esta pregunta aún son muy claros y es un problema binario. Echemos un vistazo.

2. Análisis del pensamiento:

1. ¿Qué idea examina esta pregunta? ¿Cuál es tu pensamiento?

¿Qué información clave proporciona esta pregunta?

  • El dato dado por el título es un entero positivo, no necesitamos considerar el caso de números negativos cuando lo procesamos
  • Necesitamos saber cómo convertir números enteros a binarios para manejar mejor este problema. Si es un número negativo, también debemos tratar con el complemento de orden superior de 1, pero este problema no requiere

Con respecto al problema del hexadecimal, todos tenemos que pensar en el método de dividir y girar, este es un método matemático que aprendimos cuando estábamos en la escuela primaria, ahora cuando hacemos problemas de programación, muchos de ellos son ideas matemáticas. matemáticas y viajar por el mundo.

Usando el ejemplo dado en el título, dedúzcalo: cuando n=11

  • 11 dividido por 2, cociente 5, resto 1
  • 5 dividido por 2, cociente 2, resto 1
  • 2 dividido por 2, cociente 1, resto 0
  • 1 dividido por 2, cociente 0, resto 1
  • Entonces 11 en binario es 1011

Según la ilustración de la pregunta, se requieren números binarios, y dos números adyacentes no pueden ser iguales, ni 0 ni 1 ,

Luego, no solo necesitamos poder calcular el número binario, sino que también debemos filtrar, luego podemos convertir el problema en si el resto de cada vez del método de división de lanzar y girar es igual al último resto ,

Si es igual, no se ajusta al significado de la pregunta, si el resto no es igual al último resto cuando el cociente es 0, entonces el número está de acuerdo con el significado de la pregunta.

A continuación, podemos traducirlo a código.

3. Codificación

De acuerdo con la lógica y el análisis anteriores, podemos traducirlo al siguiente código

La codificación es la siguiente:

func hasAlternatingBits(n int) bool {
 // 将入参给到临时变量,我们的编码原则是不能改变入参
 tmp := n
// 默认上一次余数为 2 ,因为咱们第一次辗转相除的时候,余数一定不可能是 2 ,所以第一次肯定不会等于 2 ,或者可以将 pre 赋值给大于 2 的数字也是可以的
 for pre := 2; tmp != 0; tmp /= 2 {
        yushu := tmp % 2
     // 校验本次的余数和上一次的余数是否相等
        if yushu == pre {
            return false
        }
     // 对上一次的余数进行赋值
        pre = yushu
    }
    return true

}
复制代码

Después de leer el código anterior, sé que esta pregunta sigue siendo muy simple, pero la idea también es muy importante. No importa lo que hagas, la base debe ser sólida.

4. Resumen:

La complejidad temporal de esta pregunta no es O(n) , es O(logn) , porque el número de bucles es el número de dígitos convertidos de números enteros a números binarios, y la complejidad espacial es O(1)

Dirección del título original: 693. Número binario de bit alternativo

Estoy aquí hoy, lo que he aprendido, si hay alguna desviación, corríjame

Bienvenido a me gusta, seguir, favorito

Amigos, su apoyo y aliento son la motivación para que yo persista en compartir y mejorar la calidad.

Bien, aquí está esta vez.

La tecnología es abierta, y nuestra mentalidad debe ser abierta. Acepta el cambio, vive bajo el sol y sigue adelante.

Soy el pequeño demonio Nezha , bienvenido a dar me gusta, seguir y coleccionar, hasta la próxima ~

Supongo que te gusta

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