From 6a5396d54db43174c9b4b21db8cc9febcea3d53d Mon Sep 17 00:00:00 2001 From: = <--gbloal> Date: Wed, 15 May 2024 14:17:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E9=A2=98=E4=B8=A4=E6=95=B0=E7=9B=B8=E5=8A=A0(leetcode=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- leetcode/中等/两数相加.js | 90 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 leetcode/中等/两数相加.js diff --git a/leetcode/中等/两数相加.js b/leetcode/中等/两数相加.js new file mode 100644 index 0000000..f162baa --- /dev/null +++ b/leetcode/中等/两数相加.js @@ -0,0 +1,90 @@ +/* +给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 + +请你将两个数相加,并以相同形式返回一个表示和的链表。 + +你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 + +输入: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] + +解释:也就是用列表表示 +*/ + +function addTwoNumbers(l1, l2) { + const head = new ListNode() + let curNode = head + let carry = 0 + while (l1!==null || l2!==null) { + let x = l1 !== null ? l1.val : 0 + let y = l2 !== null ? l2.val : 0 + let sum = x + y + carry + curNode.val = sum % 10 + carry = Math.floor(sum/10) + if(l1!==null) l1=l1.next + if(l2!==null) l2=l2.next + if(carry > 0 || l1 !=null || l2 != null){ + curNode.next = new ListNode() + curNode = curNode.next + } + } + if(carry!==0) { + curNode.val = carry + } + return head +} + +function addTwoNumbers2(l1, l2){ + const task1 = [] + const task2 = [] + while(l1 || l2) { + if(l1){ + task1.push(l1.val) + l1 = l1.next + } + + if(l2){ + task2.push(l2.val) + l2 = l2.next + } + } + let target = BigInt(task1.reverse().join('')) + BigInt(task2.reverse().join('')) + + // console.log(Number(task1.reverse().join(''))); + console.log(target); + + const head = new ListNode() + let cur = head + while (target) { + cur.val = target % 10n + target = target / 10n + cur.next = target ? new ListNode() : null + cur = cur.next + } + return head +} + +// 换一种思路,我们按照顺序压入栈中,再依次弹出,之后生成对应的数,最后再把这个数转化为链表不就行了吗? + + + + +// 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] +// 输出:[8,9,9,9,0,0,0,1] + +import {LinkList, LinkListNode as ListNode} from '../../list/index.js' + +const l1 = LinkList.fromArray([1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]).head +const l2 = LinkList.fromArray([5,6,4]).head + +// console.log(LinkList.prototype.toString.apply(addTwoNumbers(l1,l2))); +console.log(LinkList.prototype.toString.apply(addTwoNumbers2(l1,l2))); \ No newline at end of file