LeetCode刷题记录(一):两数相加

简介: LeetCode刷题记录(一):两数相加

两数相加

两数相加的题目如下图所示,也可以在LeetCode题目中找到此题。

网络异常,图片无法展示
|

注:关于LeetCode刷题记录,都是Java语言来解答,如果需要其他语言来编写会单独注明。

题目解析

两数相加,在题目的详细描述中,大概有着以下几点关键信息:

  1. 两个非空链表的相加。
  2. 两个非空链表的长度不一定相同。
  3. 每个链表中的节点数在范围 [1, 100] 内。
  4. 0 <= Node.val(节点值) <= 9
  5. 数据保证列表表示的数字不含前导零
  6. 链表中的节点均是数字,整个链表代表着一个逆序的数值。
  7. 链表的结构代码如下:
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; }
}
复制代码

比如链表A:2-4-3,表现值为:342;(暂且叫这个真实意图为表现值)

链表B:5-6-4,表现值为465;

两数相加的含义,也就是两个表现值为:342+465=807(也就是7-0-8).

我的解决过程

了解到以上的关键信息,再根据题目的描述,最先想到的就是通过循环链表元素的方式,将每个链表中的节点元素一一拿出来做相加操作。

在相加操作后,对大于等于10的情况进位处理(小学数学),并且将在下一次循环操作时进行加1操作。

网络异常,图片无法展示
|

因为链表中的数字相对表现值是逆序的,最后要得出的结果也是逆序的,所以是可以通过一个新链表对象依次插入值。也就不需要手动倒序之类的操作了。

开始编写

由于两个链表的长度不一定相同,所以循环时必须循环节点长度更长的链表。

因为ListNode链表对象中没有length长度属性,没办法通过这个条件进行循环。

但是根据条件3:每个链表中的节点数在范围[1, 100]内,可以通过使用具体数值循环操作。

完整的代码如下,是最笨的方法了。

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode l3 = null;
    boolean flag = false;
    ListNode node1 = l1;
    ListNode node2 = l2;
    ListNode node3 = l3;
    for(int i = 0; i <= 100; i++){
        int val;
        int c = flag ? 1 : 0;
        if(node1 != null && node2 != null){
            val = add(node1.val, node2.val, c);
            flag = node1.val + node2.val + c >= 10;
        }else if(node1 == null){
            val = node2.val + c >= 10 ? node2.val + c - 10 : node2.val + c;
            flag = node2.val + c >= 10;
        }else {
            val = node1.val + c >= 10 ? node1.val + c - 10 : node1.val + c;
            flag = node1.val + c >= 10;
        }
        ListNode node = new ListNode(val);
        if(l3 == null){
            l3 = node;
            node3 = l3;
        }else{
            node3.next = node;
            node3 = node3.next;
        }
        if(node1 != null){
            node1 = node1.next;
        }
        if(node2 != null){
            node2 = node2.next;
        }
        if(node1 == null && node2 == null){
            if(flag){
                node3.next = new ListNode(1);
            }
            break;
        }
    }
    return l3;
}
private int add(int a, int b, int c){
    return a + b + c >= 10 ? a + b + c - 10 : a + b + c;
}


目录
相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
57 4
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
128 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
46 1
|
3月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
4月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
72 7
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
58 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
34 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
29 4