[Diario de preguntas de pincel] 67. Suma binaria

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 preguntas de pincel] 67. Suma binaria

El artículo 15 de este diario de revisión se titula: 67. Sumatoria binaria , simple

1. Descripción del tema:

Después de hacer ejercicio por la noche, continúe mirando las preguntas. Esta pregunta, el título es muy claro, la descripción es muy breve y parece ser una pregunta simple . Esta es una pregunta simple. Cambiemos de cabeza .

Confianza mutua - No sé de dónde viene la confianza

Pero no podemos tomarlo a la ligera, y aún tenemos que analizar cuidadosamente el contenido clave y los puntos de prueba que brinda esta pregunta.

2. Análisis del pensamiento:

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

La información proporcionada en el título tiene estos puntos clave:

  • Los números binarios dados son todos cadenas , y lo que devolvemos también debe ser cadenas
  • Los números en la cadena son solo 0 y 1 , y la cadena dada no contiene un 0 inicial, y la longitud de la matriz varía de 1 a 10 a la cuarta potencia, por lo que no es necesario considerar la entrada anormal para esta pregunta . .

Mira nuestro ejemplo: a = "1010", b = "1011"

Mirando este ejemplo, la longitud de la matriz **a es la misma que la longitud de la matriz b, ** y el medio implica acarreo, y el bit más alto también implica acarreo

En el siguiente ejemplo, también tenga en cuenta que la longitud de la matriz a es menor que la longitud de la matriz b, o la longitud de la matriz b es menor que la longitud de la matriz a . De manera predeterminada, la anterior es la matriz a. , y la siguiente es la matriz b.

En general, estos puntos deben ser considerados:

  • largo (a) == largo (b)
  • largo (a) <largo (b)
  • len (a)> len (b)
  • manejo de acarreo

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 addBinary(a string, b string) string {
    lenA,lenB := len(a),len(b)
    n := 0
    if lenA > lenB {
        n = lenA
    }else{
        n = lenB
    }

    res := ""
    jinwei := 0
    // 使用较长数组的长度来控制循环
    for i:=0; i<n; i++ {
        // 对应位数 a 数组上有值,那就进行相加
        if i<lenA {
            jinwei += int(a[lenA-i-1] - '0')
        }
        // 对应位数 b 数组上有值,那就进行相加
        if i<lenB {
            jinwei += int(b[lenB-i-1] - '0')
        }
        // a 数组和 b 数组对应位置上相加后,需要填在该位置的值 
        res = strconv.Itoa(jinwei % 2) + res
        // 需要向前进位的数据
        jinwei = jinwei / 2
    }

    // 判断最后是否需要进位
    if jinwei > 0{
        res = "1" + res
    }

    return res
}
复制代码

Después de leer la codificación anterior, puede encontrar que la codificación se basa completamente en el pensamiento y el análisis antes de la codificación.

Para ver lo grande desde lo pequeño, antes de codificar, realmente necesitamos hacer que el diseño del esquema sea claro y práctico, y desglosar cada detalle y punto ciego uno por uno, para reducir el riesgo después de codificar.

4. Resumen:

La complejidad temporal de esta pregunta es obviamente O(n), n es la longitud de la matriz más larga y la complejidad espacial es O(1), lo que introduce un consumo de memoria de nivel constante

Dirección del título original: 67. Suma binaria

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/7079773017902956558
Recomendado
Clasificación