首页 > 其他分享 >『LeetCode』2. 两数相加 Add Two Numbers

『LeetCode』2. 两数相加 Add Two Numbers

时间:2023-12-21 23:11:56浏览次数:41  
标签:ListNode next Add l2 Numbers l1 total LeetCode next1

『1』迭代法

class Solution {
    // Iteration
    // N is the size of l1, M is the size of l2
    // Time Complexity: O(max(M, N))
    // Space Complexity: O(max(M, N)) if dummy is counted else O(1)
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int next1 = 0;
        int total = 0;
        ListNode dummy = new ListNode(); // 虚拟头节点
        ListNode cur = dummy;
        while (l1 != null && l2 != null) {
            total = l1.val + l2.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l1 = l1.next;
            l2 = l2.next;
            cur = cur.next;
        }

        while (l1 != null) {
            total = l1.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l1 = l1.next;
            cur = cur.next;
        }

        while (l2 != null) {
            total = l2.val + next1;
            cur.next = new ListNode(total % 10);
            next1 = total / 10;
            l2 = l2.next;
            cur = cur.next;
        }

        // 处理最后的进位
        if (next1 != 0) {
            cur.next = new ListNode(next1);
        }
        
        return dummy.next;
    }
}

扩展:哨兵节点通常被称为"哑结点"或"虚拟节点"。它们的作用是充当链表中的一个假头,其目的是简化链表操作的边界条件处理。它们通常用于链表的插入、删除和遍历操作中,可以帮助简化代码逻辑,避免对空链表或头结点进行特殊处理。在一些算法和数据结构中,哨兵节点能够简化代码的实现,提高程序的健壮性和可读性。

『2』递归法

class Solution {
    // Recursion
    // N is the size of l1, M is the size of l2
    // Time Complexity: O(max(M, N))
    // Space Complexity: O(max(M, N)) if dummy is counted else O(1)
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int total = l1.val + l2.val;
        int next1 = total / 10;
        ListNode res = new ListNode(total % 10);
        if (l1.next != null || l2.next != null || next1 != 0) {
            l1 = l1.next != null ? l1.next : new ListNode(0);
            l2 = l2.next != null ? l2.next : new ListNode(0);
            l1.val += next1;
            res.next = addTwoNumbers(l1, l2);
        }
        return res;
    }
}

标签:ListNode,next,Add,l2,Numbers,l1,total,LeetCode,next1
From: https://www.cnblogs.com/torry2022/p/17920320.html

相关文章

  • Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十三章、拦截器拦截器:Interceptor拦截中断类似于javaweb中的Filter,不过没有Filter那么强大作用SpringMVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和......
  • Leetcode 2507. 使用质因数之和替换后可以取到的最小值 优化前 优化后
    https://leetcode.cn/problems/smallest-value-after-replacing-with-sum-of-prime-factors/description/给你一个正整数n。请你将n的值替换为n的质因数之和,重复这一过程。注意,如果n能够被某个质因数多次整除,则在求和时,应当包含这个质因数同样次数。返回n可以取到......
  • 『LeetCode』1. 两数之和 Two Sum
    『1』暴力法classSolution{//BruteForce//TimeComplexity:O(n^2)//SpaceComplexity:O(1)publicint[]twoSum(int[]nums,inttarget){for(inti=0;i<nums.length;i++){for(intj=i+1;j<nums.length......
  • 242-InetAddress.getLocalHost().getHostName() took 20021 milliseconds to respond
    一台windows服务器,要部署jar,启动成功,却无法正常请求。会报错:InetAddress.getLocalHost().getHostName()took20021millisecondstorespond.Pleaseverifyyournetworkconfiguration.经查,该服务器启动了一个其他服务,该服务占用了所有的网络请求带宽,导致网络不通。找到服......
  • [LeetCode Hot 100] LeetCode74. 搜索二维矩阵
    题目描述思路:二维矩阵坐标变换+二分查找二维矩阵坐标变换:只要知道二维数组的的行数m和列数n,二维数组的坐标(i,j)可以映射成一维的index=i*n+j;反过来也可以通过一维index反解出二维坐标i=index/n,j=index%n。(n是列数)把二维数组matrix的元素访问抽象成在......
  • [LeetCode] LeetCode852. 山脉数组的顶峰索引
    题目描述思路:用二分进行排除不满足条件的元素,最后剩下的元素即为答案往常我们使用「二分」进行查值,需要确保序列本身满足「二段性」:当选定一个端点(基准值)后,结合「一段满足&另一段不满足」的特性来实现“折半”的查找效果。但本题求的是峰顶索引值,如果我们选定数组头部或者尾......
  • [LeetCode] LeetCode162. 寻找峰值
    题目描述思路:同LeetCode852.山脉数组的顶峰索引注意:当nums数组只有一个元素的时候,这个元素就是顶元素因为根据题目:nums[-1]=nums[n]=-∞方法一:classSolution{publicintfindPeakElement(int[]nums){if(nums.length==1)return0;intl......
  • [LeetCode] 1362. Closest Divisors 最接近的因数
    Givenaninteger num,findtheclosesttwointegersinabsolutedifferencewhoseproductequals num+1 or num+2.Returnthetwointegersinanyorder.Example1:Input:num=8Output:[3,3]Explanation:Fornum+1=9,theclosestdivisorsare3&......
  • K8S - Add-on: cert-manager
    https://cert-manager.io/docs/ cert-managercert-manageraddscertificatesandcertificateissuersasresourcetypesinKubernetesclusters,andsimplifiestheprocessofobtaining,renewingandusingthosecertificates.Itcanissuecertificatesfroma......
  • Leetcode—旋转矩阵
    48. 旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,......