LeetCode2之两数相加(Add Two Numbers)

本是古典 何须时尚 2022-04-22 00:36 298阅读 0赞

一、题目

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RyZWVfaWZjb25maWc_size_16_color_FFFFFF_t_70

二、一种解题思路

1)介绍:暴力解法(感觉没别的了吧,可能是我笨吧,原地爆炸下)

  1. 方法思路:一路遍历,一路加,遇到一个链表的nextnull时,则停止遍历该链表,并且让另一个链表的剩余节点和0相加。若链表已经遍历完了,还存在进位数,则在创建一个next节点。

时间复杂度:O(Max(m,n))

空间复杂度:O(Max(m,n))或O(Max(m,n)+1)

2)核心代码:

  1. /**
  2. * 2:两数之和
  3. */
  4. public class AddTwoNums {
  5. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  6. ListNode head = new ListNode(0);
  7. ListNode target = head;
  8. ListNode x = l1;
  9. ListNode y = l2;
  10. int num1;
  11. int num2;
  12. int sum = 0;
  13. //进位的值
  14. int carry = 0;
  15. while (x != null || y != null) {
  16. //规避某一个链表没有next的情况
  17. num1 = (x != null) ? x.val : 0;
  18. num2 = (y != null) ? y.val : 0;
  19. sum = num1 + num2 + carry;
  20. carry = sum / 10;
  21. target.next = new ListNode(sum % 10);
  22. target = target.next;
  23. if (x != null) {
  24. x = x.next;
  25. }
  26. if (y != null) {
  27. y = y.next;
  28. }
  29. }
  30. //排除链表最后一位出现进位的情况
  31. if (carry > 0) {
  32. target.next = new ListNode(carry);
  33. }
  34. return head.next;
  35. }
  36. }

3)辅助类:

  1. public class ListNode {
  2. public int val;
  3. public ListNode next;
  4. public ListNode(int x) {
  5. val = x;
  6. next = null;
  7. }
  8. @Override
  9. public String toString() {
  10. return "ListNode{" +
  11. "val=" + val + "}";
  12. }
  13. }

三、LeetCode成功截图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RyZWVfaWZjb25maWc_size_16_color_FFFFFF_t_70 1

四、感想

感觉自己还没做到最好,希望大家有好方法指教下,加油,加油,再加油,坚持,坚持,再坚持。

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读

    相关 2.相加 Add Two Numbers

    题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回