首页 > 其他 > 详细

[leetcode]Add Two Numbers

时间:2014-07-23 16:51:51      阅读:372      评论:0      收藏:0      [点我收藏+]

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

 

算法思路:

思路1:

将两个因数转换成整型,求出和,再将和转换为链表形式

【注意】这个int类型会溢出,严格来说,long也会溢出,因此是不严谨的。

代码如下:

bubuko.com,布布扣
 1 public class Solution {  
 2     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
 3             if(l1 == null) return l2;
 4             if(l2 == null) return l1;
 5             return num2List( getNum(l1)  + getNum(l2));    
 6         }
 7         private long getNum(ListNode l){
 8             if(l == null) return 0;
 9             long num = 0;
10             long length = 0;
11             while( l != null){
12                 num += Math.pow(10,length) * l.val;
13                 length++;
14                 l = l.next;
15             }
16             return num;
17         }
18         private ListNode num2List(long num){
19             ListNode hhead = new ListNode(0);
20             ListNode tail = hhead;
21             if(num == 0) return hhead;
22             while(num != 0){
23                 ListNode tem = new ListNode((int)(num % 10));
24                 tail.next = tem;
25                 tail = tail.next;
26                 num /= 10;
27             }
28             return hhead.next;
29         }
30 }
View Code

 

思路2:

直接在两个list中进行加和操作。模拟加法。

 1 public class Solution {
 2     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
 3         if(l1 == null) return l2;
 4         if(l2 == null) return l1;
 5         int l1Length = getLength(l1),l2Length = getLength(l2);
 6         if(l1Length > l2Length) return addTwoNumbers(l2, l1);
 7         ListNode l2Pointer = l2;
 8         ListNode l1Pointer = l1;
 9         while(l2Pointer != null){
10             l2Pointer.val = l2Pointer.val + ((l1Pointer == null) ? 0 : l1Pointer.val);
11             if(l2Pointer.val > 9){
12                 l2Pointer.val -= 10 ;
13                 if(l2Pointer.next == null){
14                     ListNode tail = new ListNode(1);
15                     l2Pointer.next = tail;
16                     break;
17                 }
18                 l2Pointer.next.val++;
19             }
20             l2Pointer = l2Pointer.next;
21             if(l1Pointer != null)l1Pointer = l1Pointer.next;
22         }
23         return l2;
24     }
25     private int getLength(ListNode list){
26         int length = 0;
27         while(list != null){
28             length++;
29             list = list.next;
30         }
31         return length;
32     }
33 }

[leetcode]Add Two Numbers,布布扣,bubuko.com

[leetcode]Add Two Numbers

原文:http://www.cnblogs.com/huntfor/p/3863299.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!