leetcode 2. Suma dos números (java)

Descripción de la pregunta

Dificultad:
Leetcode medio 2. Suma dos números

Se le proporcionan dos listas enlazadas no vacías, que representan dos números enteros no negativos. Cada uno de sus dígitos se almacena en orden inverso y cada nodo solo puede almacenar un dígito.
Agregue dos números y devuelva una lista vinculada que represente la suma en la misma forma.
Puedes asumir que, excepto el número 0, ninguno de los números comenzará con 0.

Ejemplo 1:
Insertar descripción de la imagen aquíEntrada: l1 = [2,4,3], l2 = [5,6,4]
Salida: [7,0,8]
Explicación: 342 + 465 = 807.

Ejemplo 2:
Entrada: l1 = [0], l2 = [0]
Salida: [0]

Ejemplo 3:
Entrada: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Salida: [8,9,9,9,0,0,0 ,1]

Consejo:
el número de nodos en cada lista vinculada está en el rango [1, 100]
0 <= Node.val <= 9
Los datos de la pregunta garantizan que el número representado por la lista no contiene ceros a la izquierda

Insertar descripción de la imagen aquí

Técnica centinela

Esta es una pregunta de simulación, que simula el proceso de suma vertical manual:
desde el dígito más bajo hasta el más alto, sumalos dígito por dígito. Si la suma es mayor o igual a
, conserva el dígito único y al mismo tiempo avanza. el dígito anterior por 1 si hay un acarreo en el dígito más alto, debe agregarse al frente.
Al calcular cada bit, se debe considerar el problema de acarreo del bit anterior y el valor de acarreo también debe actualizarse después del cálculo del bit actual.
Si el valor de acarreo es 1 después de atravesar ambas listas vinculadas, agregue el nodo 1 al frente de la nueva lista vinculada.Con
respecto a los problemas de la lista vinculada, existe una técnica común: agregar un nodo principal virtual (centinela) para ayudar a simplificar el juicio de situaciones límite.

Demostración de código:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    
 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
        ListNode dump = new ListNode(0);
        ListNode tmp = dump;
        int t = 0;

        while(l1 != null || l2 != null){
    
    
            int a = l1 != null ? l1.val : 0;
            int b = l2 != null ? l2.val : 0;
            int ans = a + b + t;
            tmp.next = new ListNode(ans % 10);
            tmp = tmp.next;
            t = (ans / 10);
            if(l1 != null) l1 = l1.next;
            if(l2 != null) l2 = l2.next;
        }
        if(t > 0)tmp.next = new ListNode(t);
        return dump.next;
    }
}

Tema especial sobre algoritmos recursivos

leetcode-779.El símbolo gramatical Kth

leetcode669.Podar un árbol de búsqueda binario

leetcode687.La ruta más larga con el mismo valor.

Supongo que te gusta

Origin blog.csdn.net/SP_1024/article/details/132733978
Recomendado
Clasificación