leetcode - [2]两数相加|刷题打卡
我是通过idea的leetcode插件获取题目做题的,所以题目描述基本都会有注释符号哈
1. 题目描述
//给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
//
// 请你将两个数相加,并以相同形式返回一个表示和的链表。
//
// 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
//
// 示例 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]
//
// 提示:
//
// 每个链表中的节点数在范围 [1, 100] 内
// 0 <= Node.val <= 9
// 题目数据保证列表表示的数字不含前导零
//
// Related Topics 递归 链表 数学
2. 思路分析
看到这道题,我的初始想法就是直接遍历每一位,然后加起来,毕竟人家都帮你排好了。不过有几个比较需要考虑的点:
- 如果当前的两个
ListNode对应的节点值相加起来大于10,那就要进位到下一个循环 - 如果两个
ListNode的位数不一样,意味着这个ListNode为null,需要当做0处理
主要注意上面两点之后,就可以开始敲代码尝试了
3. AC代码
public class No2 {
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode re = new ListNode();
getSum(re, l1, l2, 0);
return re;
}
/**
* // 执行用时:
* //2 ms
* //, 在所有 Java 提交中击败了
* //99.92%
* //的用户
* //内存消耗:
* //39 MB
* //, 在所有 Java 提交中击败了
* //43.23%
* //的用户
*/
public static void getSum(ListNode re, ListNode l1, ListNode l2, int plus) {
// 结束条件,相加的两个都没有下一个节点了
if (l1 == null && l2 == null) {
// 如果节点的最后一位相加过10,则加回去
if(plus != 0) {
re.val = plus;
}
return;
}
// 可能存在某一个节点已经空了
int l1Val = l1 == null ? 0 : l1.val;
int l2Val = l2 == null ? 0 : l2.val;
int sum = l1Val + l2Val + plus;
int val = sum % 10;
plus = sum / 10;
re.val = val;
// 空传空, 为空就传下一个
l1 = l1==null?l1:l1.next;
l2 = l2==null?l2:l2.next;
// 两个节点有一个非空,或者值过10 ,返回结果需要多一位
if (l1 != null || l2 != null || plus == 1) {
re.next = new ListNode();
}
// 还没结束,继续遍历
getSum(re.next, l1,l2, plus);
}
public static void main(String[] args) {
ListNode l1 = new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9))));
ListNode l2 = new ListNode(9, new ListNode(9, new ListNode(9)));
ListNode re = addTwoNumbers(l1, l2);
System.out.println(re);
}
}
// 题目提供的表结构
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
4. 总结
做题思路对了只是一半,调试还要调很久
要细 细~~~
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情