445. Add Two Numbers II
来源:互联网 发布:小女孩淘宝模特叫什么 编辑:程序博客网 时间:2024/05/16 15:30
- 题目
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7
- 分析:
题意要求就是将两个数字相加,由于我们要从低位相加,但链表头相当于栈顶,所以要对原list进行逆序操作,就是一次出栈,入栈。这样是不会消费额外的内存的因为这是链表。逆序之后就可以直接相加了,考察的还是链表的出、入栈操作。
- 代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int length_l1=1; int length_l2=1; ListNode l=new ListNode(0); ListNode l1_reverse=new ListNode(l1.val); while(l1.next!=null) { l1=l1.next; ListNode oldfirst=l1_reverse; l1_reverse=new ListNode(l1.val); l1_reverse.next=oldfirst; length_l1++; } ListNode l2_reverse=new ListNode(l2.val); while(l2.next!=null) { l2=l2.next; ListNode oldfirst=l2_reverse; l2_reverse=new ListNode(l2.val); l2_reverse.next=oldfirst; length_l2++; } int jinwei=0; int length_min=Math.min(length_l1, length_l2); while(length_min-->0) { l.val=(l1_reverse.val+l2_reverse.val+jinwei)%10; jinwei=(l1_reverse.val+l2_reverse.val+jinwei)/10; l1_reverse=l1_reverse.next; l2_reverse=l2_reverse.next; ListNode l_old=l; l=new ListNode(0); l.next=l_old; } if(length_l1>length_l2) {while(l1_reverse!=null){ l.val=(l1_reverse.val+jinwei)%10; jinwei=(l1_reverse.val+jinwei)/10; l1_reverse=l1_reverse.next; ListNode l_old=l; l=new ListNode(0); l.next=l_old;} }else if(length_l2>length_l1){while(l2_reverse!=null){ l.val=(l2_reverse.val+jinwei)%10; jinwei=(l2_reverse.val+jinwei)/10; l2_reverse=l2_reverse.next; ListNode l_old=l; l=new ListNode(0); l.next=l_old;} } if(jinwei==1) l.val=1; else l=l.next; return l; }
代码看起来貌似很多,但其实就是一个逆序操作,然后从低位相加,考虑进位,两个数字位数不同等边缘情况,这份代码排名还可以80%左右,可能是因为我没有直接利用java 提供的stack而是自己用链表构造的优势。再强调一下,java封装好的stack在对时间效率要求得情况下是不建议使用的。
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II**
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II。
- 445. Add Two Numbers II
- 极大似然估计法
- Java学习-第二天(上)
- Intersection of Two Arrays II问题及解法
- 修改tomcat启动时间
- php安装mysql 拓展出现 Cannot find config.m4. Make sure that you run '/usr/bin/phpize' in the top level sou
- 445. Add Two Numbers II
- 使用VideoToolbox硬编码H.264
- 修改tomcat启动时间
- Intent详解
- Java多线程编程环境中单例模式的实现
- Tensorflow的Protocol Buffers3编程(四)
- Java多线程编程环境中单例模式的实现
- LabVIEW条件结构(有case例子)
- maven常用的依赖配置,tomcat和jetty双配置