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 .
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 ~