Leetcode 0002: ajouter deux nombres

Description du titre:

Vous recevez deux listes chaînées non vides représentant deux entiers non négatifs. Les chiffres sont stockés dans l'ordre inverse et chacun de leurs nœuds contient un seul chiffre. Ajoutez les deux nombres et renvoyez la somme sous forme de liste chaînée.
Vous pouvez supposer que les deux nombres ne contiennent aucun zéro non significatif, sauf le nombre 0 lui-même.

Exemple 1:

2
4
3
5
6
4

7
0
8

Entrée: l1 = [2,4,3], l2 = [5,6,4]
Sortie: [7,0,8]
Explication: 342 + 465 = 807.

Exemple 2:

Entrée: l1 = [0], l2 = [0]
Sortie: [0]

Exemple 3:

Entrée: nums = [3,3], target = 6
Sortie: [0,1]

Contraintes:

Le nombre de nœuds dans chaque liste liée est compris entre [1, 100].
0 <= Node.val <= 9
Il est garanti que la liste représente un nombre qui n'a pas de zéros non significatifs.

Complexité temporelle: O (n + m)
opération d'addition simulée:
1. Énumérer deux listes chaînées depuis le début en même temps, la valeur de sum est égale à la somme des éléments courants des listes chaînées l1 et l2 plus la valeur de la retenue précédente, puis somme% 10 L'élément de est stocké dans la liste chaînée fictive, et la valeur de somme / 10 est affectée à la retenue, l1 et l2 reculent en même temps
, et la condition de fin de boucle. Lorsque tous les éléments sont traversés et portent == 0.

/**
 * 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 dummy = new ListNode();
        ListNode p = l1, q = l2, curr = dummy;
        int carry = 0;
        while(l1 != null || l2 != null || carry != 0){
    
    
            int x = l1 == null ? 0:l1.val;
            int y = l2 == null ? 0:l2.val;
            int sum = x + y + carry;
            carry = sum /10;
            curr.next = new ListNode(sum % 10);
            if(l1 != null) l1 = l1.next;
            if(l2 != null) l2 = l2.next;
            curr = curr.next;
        }
        return dummy.next;
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43946031/article/details/113778829
conseillé
Classement