提卡网站建设,京东网上商城官网下载,网站多少钱一年,wordpress添加全屏广告力扣热门100题 - 2.两数相加 题目链接#xff1a;2.两数相加
题目描述#xff1a;
给你两个 非空 的链表#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的#xff0c;并且每个节点只能存储 一位 数字。请你将两个数相加#xff0c;并以相同形式返… 力扣热门100题 - 2.两数相加 题目链接2.两数相加
题目描述
给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。请你将两个数相加并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外这两个数都不会以 0 开头给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那 两个 整数并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 输入l1 [2,4,3], l2 [5,6,4]
输出[7,0,8]
解释342 465 807.输入l1 [0], l2 [0]
输出[0]输入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
题目数据保证列表表示的数字不含前导零2 nums.length 104
-109 nums[i] 109
-109 target 109
只会存在一个有效答案解题思路 递归深度遍历
在每一步递归中计算当前节点的和将和加入新的节点并判断是否有进位。如果有进位则在下一次递归中加上进位。
使用变量 a 来表示进位。在函数签名中将进位作为参数传递。
通过判断 l1 和 l2 是否为 null 来处理链表长度不同的情况。
当 l1 l2 都为空时 需要注意是否有进位需要添加时间复杂度O(max(l1,l2))代码
class Solution {ListNode ans;public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head new ListNode(0);ans head;process(l1, l2, 0);return head.next;}private void process(ListNode l1, ListNode l2, int a) {if (l1 null l2 null) {if (a 0) ans.next new ListNode(a);return;}int num1 l1 null ? 0 : l1.val;int num2 l2 null ? 0 : l2.val;int sum num1 num2 a;ans.next new ListNode(sum % 10);a sum / 10;ans ans.next;process(l1 null ? null : l1.next, l2 null ? null : l2.next, a);}
}