LeetCode第2题两数相加

2023年 8月 21日 28.3k 0

继续打卡算法题,今天学习的是第LeetCode的第2题两数相加,这道题目是道中等题。

image.png

分析一波题目

单链表,都需要从头开始遍历,我们可以同时开始遍历两个头节点,创建一个新链表接收新数字,把每位计算的值记录到新的节点,有进位需要保存下来,给下一个节点使用。

同时在使用新链表的时候,一般会使用一个虚拟节点指向头节点,这样可以方便找到头节点。

编码解决

/**
 * 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) {

        if (l1 == null) {
            return l2;
        }
        if(l2 == null) {
            return l1;
        }
        ListNode dumy = new ListNode(-1);
        int bit = 0;
        ListNode last = dumy;
        while(l1 !=null || l2!=null || bit > 0) {
            int v1 = l1 == null ? 0 : l1.val;
            int v2 =  l2==null ? 0: l2.val;
            ListNode l3 = new ListNode(-1);
            //有进位的情况
            if((v1 + v2 + bit) >= 10) {
                l3 = new ListNode((v1 + v2 + bit) % 10);
                //进位存下来
                bit = (v1 + v2 + bit) / 10;
            } else {
                
                l3 = new ListNode(v1 + v2 + bit);
                bit = 0;
            }
            l1 =  l1 == null ? null : l1.next;
            l2 = l2 == null ? null : l2.next;
            last.next = l3;
            last = l3;
        }

        return dumy.next;
    }
}

总结

这个题目就是简单的遍历节点,然后直接相加就可以,时间复杂度O(n)就可以解决

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论