• Leetcode Add Two Numbers & 两数相加 解题报告


    1.问题描述

    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序方式存储的,并且每个节点只能存储一位数字。
    请你将两个数相加,并以相同形式返回一个表示和的链表。
    你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    2.测试用例

    示例 1:
    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.

    示例 2:
    输入:l1 = [0], l2 = [0]
    输出:[0]

    示例 3:
    输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    输出:[8,9,9,9,0,0,0,1]

    3.补充说明

    每个链表中的节点数在范围 [1, 100] 内
    0 <= Node.val <= 9
    题目数据保证列表表示的数字不含前导零

    4.解题报告

    1. 递归
      /**
       * 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 currentNode = new ListNode();
              int next = 0;
              currentNode = assignListNode(l1, l2, currentNode, next);
              return currentNode;
          }
          
          public ListNode assignListNode(ListNode l1, ListNode l2, ListNode currentNode, int next) {
              if (l1 == null && l2 == null) {
                  if (next > 0) {
                      currentNode.val = 1;
                  } else {
                      currentNode = null;
                  }
                  return currentNode;
              }
              int x = l1 == null ? 0 : l1.val;
              int y = l2 == null ? 0 : l2.val;
              int sum = x + y + next;
              currentNode.val = sum % 10;
              currentNode.next = new ListNode();
              currentNode.next = assignListNode(l1 == null ? null : l1.next, l2 == null ? null : l2.next, currentNode.next, sum / 10);
              return currentNode;
          }
      }
      
    2. 内循环
      public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
          ListNode dummyHead = new ListNode(0);
          ListNode p = l1, q = l2, curr = dummyHead;
          int carry = 0;
          while (p != null || q != null) {
              int x = (p != null) ? p.val : 0;
              int y = (q != null) ? q.val : 0;
              int sum = carry + x + y;
              carry = sum / 10;
              curr.next = new ListNode(sum % 10);
              curr = curr.next;
              if (p != null) p = p.next;
              if (q != null) q = q.next;
          }
          if (carry > 0) {
              curr.next = new ListNode(carry);
          }
          return dummyHead.next;
      }
      
  • 相关阅读:
    Spring -- spring 和 hibernate 整合
    文件:一个任务
    文件:因为懂你,所以永恒
    集合:在我的世界里,你就是唯一
    总结回顾
    快速排序的优化
    快速排序
    归并排序(迭代实现)- 数据结构和算法95
    归并排序(递归实现)- 数据结构和算法94
    堆排序的代码实现
  • 原文地址:https://www.cnblogs.com/worldline/p/15117793.html
Copyright © 2020-2023  润新知