🙀

自己练习的算法题

两数相加

notion image
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
  1. 暴力法:真的算值,然后循环遍历,但是遇到超过上限的数字,加法失效
    1. 根据数组转化成链表:
      const dummy = new ListNode() let cur = dummy for (int i = 0; i < numbers.length; i++) { cur.next = new ListNode(numbers[i]); cur = cur .next; }
  1. 遍历链表
    1. 通过观察我们发现,两个链表其实是相同位相加,进位加到后面的位的和里,所以就可以循环遍历了,不要忘了如果最后有进位,要多设置一个链表
      var addTwoNumbers = function(l1, l2) { let carry = 0 const dummy = new ListNode() let cur = dummy while(l1||l2){ const val1 = l1?l1.val:0; const val2 = l2?l2.val:0; const sum = val1+val2+carry carry = Math.floor(sum/10) cur.next = new ListNode(sum % 10) cur = cur.next if(l1){ l1 = l1.next } if(l2){ l2 = l2.next } } if(carry){ cur.next = new ListNode(carry) } return dummy.next; };