Javascript 添加两个数字leetcode algo

Javascript 添加两个数字leetcode algo,javascript,Javascript,我在做以下leetCode问题: 我不知道为什么我的一个测试用例失败了 [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] [5,6,4] 所以问题是 给您两个非空的链表,表示两个非负 整数。数字以相反的顺序存储,每个数字 节点包含一个数字。将这两个数字相加,并将其作为 链表 您可以假设这两个数字不包含任何前导零,除了 数字0本身 为此,我编写了以下算法 /** * Definition for singly-lin

我在做以下leetCode问题:

我不知道为什么我的一个测试用例失败了

[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]
[5,6,4]
所以问题是

给您两个非空的链表,表示两个非负 整数。数字以相反的顺序存储,每个数字 节点包含一个数字。将这两个数字相加,并将其作为 链表

您可以假设这两个数字不包含任何前导零,除了 数字0本身

为此,我编写了以下算法

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
const makeLinkedList = (inArr, i) => {
    if (i < 0) return null
    return { val:inArr[i], next:makeLinkedList(inArr, i-1)}
}


var addTwoNumbers = function(l1, l2) {
    let sum = 0
    let i = 1
    while(l1 || l2) {
        if (l1 && l2) {
            sum = sum + l1.val*i + l2.val*i
             l1 = l1.next
             l2 = l2.next
        } else {

        if (l1) {  
            sum = l1.val*i + sum
            l1 = l1.next
        }
        if (l2) {
            sum = l2.val*i + sum
            l2 = l2.next
        }    
      }
        i = i*10
    }
    const sumToString = sum.toLocaleString('fullwide', {useGrouping:false}); 
    return  makeLinkedList(sumToString, sumToString.length-1)
};
i、 我的输出是
[0,3,NaN,NaN,1]
而不是
[6,6,4,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]


请注意,leetCode编译器将在输入时将数组转换为linkedlist。有人能帮我弄清楚为什么我的输入可能会失败吗

当JavaScript字符串化中的数字时,将有一个
+
符号表示正指数。您看到的序列是
1E+30
NaN
s代表
+
E
(由于还原顺序)。事实上,您可以放置一个
console.log(sum)
console.log(sumToString)
,然后在不知道这一点的情况下捕获问题,只需简单地查看问题所在

并非所有语言都会告诉您它们可以存储的最大值而不会降低精度,但JavaScript尤其会告诉您,它包含值
9 007 199 254 740 991
,因此它比
9E+15
,远小于
1+1E+30
(较长的数字)

你需要做的是像你在小学学过的那样添加数字:添加两个数字,写一个数字,然后看看是否有一个
1
带到下一个要添加的数字对

迭代版本:

函数makeLinkedList(arr,i){
i=i | | 0;

return iYou无法重新组合数字,使用
parseInt
解析它们并将其拆分回去,因为JS没有任意精度的整数类型,因此即使您的代码是“正确的”,它也会在大于~2^53的数字上失败。其思想是,您需要添加每个位置,并在迭代这些列表时生成结果