zoukankan      html  css  js  c++  java
  • LeetCode——Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    题目大意,给两个链表,一个结点存一位数,逆序存储,任务是把两个数加起来,逆序输出。返回类型为链表。

    e.g. (2 -> 4 -> 3) + (5 -> 6 -> 4)

    就是342+465=807,逆序存到链表里就是 7 -> 0 -> 8,返回就可以了。

    下面是对Node的定义。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */

    一开始,想着so easy的,把两个数读进来,加起来=sum,然后sum mod 10存起来,sum/=10。。。结果TLE。。。真是匪夷所思的TLE

    然后就换了一种方式实现,读一个数处理一个数,AC了,今天再打开这个题还是觉得匪夷所思,又提交了一次之前的代码,通过分析给出的错误信息,发现应该是溢出了,把sum改成long类型的就可以了。。。但其实虽然long可以了,如果系统测试数据更硬一点的话,还是过不了的,或者再把long改成BigInteger。。。所以推荐addTwoNumbers_New方法里的实现方式。

     1 public ListNode addTwoNumbers_New(ListNode l1, ListNode l2) {
     2         ListNode res = new ListNode(0);
     3         ListNode cur = res;
     4         int sum = 0;
     5         while (l1 != null || l2 != null) {
     6             sum /= 10;
     7             if (l1 != null) {
     8                 sum += l1.val;
     9                 l1 = l1.next;
    10             }
    11             if (l2 != null) {
    12                 sum += l2.val;
    13                 l2 = l2.next;
    14             }
    15             cur.next = new ListNode(sum % 10);
    16             cur = cur.next;
    17         }
    18         if (sum / 10 == 1)
    19             cur.next = new ListNode(1);
    20         return res.next;
    21     }
    22 
    23     public ListNode addTwoNumbers_Deprecated(ListNode l1, ListNode l2) {
    24         ListNode res = new ListNode(0);
    25         ListNode cur = res;
    26         long sum = 0;
    27         int p = 0;
    28         while (l1 != null) {
    29             sum += l1.val * Math.pow(10, p++);
    30             l1 = l1.next;
    31         }
    32         p = 0;
    33         while (l2 != null) {
    34             sum += l2.val * Math.pow(10, p++);
    35             l2 = l2.next;
    36         }
    37         if (sum == 0)
    38             return res;
    39         while (sum != 0) {
    40             ListNode node = new ListNode((int) (sum % 10));
    41             node.next = cur.next;
    42             cur.next = node;
    43             cur = node;
    44             sum /= 10;
    45         }
    46         return res.next;
    47     }
  • 相关阅读:
    传感器仿真平台——数据生成模块(三)
    写一个ES6 的遍历目录函数
    编码风格
    关于DOM事件的一个例子
    WEB DB
    表格资料
    css3 鼠标移入移出效果
    css 3D
    正向代理和反向代理
    FileReader 对象
  • 原文地址:https://www.cnblogs.com/aboutblank/p/3698745.html
Copyright © 2011-2022 走看看