LeetCode 002 Add Two Numbers
2015-03-15 10:17
337 查看
题目
两个数,每位都按照链表倒序存储。
求和,存入新的链表中。
代码
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null || l2!=null || c!=0){
int l2Val = 0;
int l1Val = 0;
if(l1!=null){
l1Val = l1.val;
l1 = l1.next;
}
if(l2!=null){
l2Val = l2.val;
l2 = l2.next;
}
int sum = l1Val+l2Val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
}
return dummy.next;
}
}
总结
1 逻辑很简单,但是很多细节容易忽略: 一个数结束了怎么办,两个数都结束了c不为1怎么办。
2 一开始选择判断两个数都不为null 来计算,会产生很多冗余代码。
3 选择只要一个数不为null 或者c 不为0 ,就能化整为零。
贴一下冗余代码
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null && l2!=null){
int sum = l1.val+l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
l2 = l2.next;
}
if(l1!=null){
while(l1!=null){
int sum = l1.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
}
}
if(l2!=null){
while(l2!=null){
int sum = l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l2 = l2.next;
}
}
if(c>=1){
ListNode newNode = new ListNode(1);
cur.next = newNode;
}
return dummy.next;
}
}
两个数,每位都按照链表倒序存储。
求和,存入新的链表中。
代码
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null || l2!=null || c!=0){
int l2Val = 0;
int l1Val = 0;
if(l1!=null){
l1Val = l1.val;
l1 = l1.next;
}
if(l2!=null){
l2Val = l2.val;
l2 = l2.next;
}
int sum = l1Val+l2Val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
}
return dummy.next;
}
}
总结
1 逻辑很简单,但是很多细节容易忽略: 一个数结束了怎么办,两个数都结束了c不为1怎么办。
2 一开始选择判断两个数都不为null 来计算,会产生很多冗余代码。
3 选择只要一个数不为null 或者c 不为0 ,就能化整为零。
贴一下冗余代码
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null && l2!=null){
int sum = l1.val+l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
l2 = l2.next;
}
if(l1!=null){
while(l1!=null){
int sum = l1.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
}
}
if(l2!=null){
while(l2!=null){
int sum = l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l2 = l2.next;
}
}
if(c>=1){
ListNode newNode = new ListNode(1);
cur.next = newNode;
}
return dummy.next;
}
}
相关文章推荐
- Leetcode_002_Add_Two_Numbers
- LeetCode 002 Add Two Numbers
- 【Leetcode】002 Add Two Numbers
- LeetCode 002, Add Two Numbers
- LeetCode-002 Add Two Numbers
- LeetCode-Add Two Numbers_002
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- [LeetCode]-002-Add Two Numbers
- LeetCode 002 AddTwoNumbers
- leetcode 002 Add_Two_Numbers
- leetcode 002 Add Two Numbers
- leetcode002 Add Two Numbers
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 2017-09-07 LeetCode_002 Add Two Numbers
- [LeetCode]题解(python):002-Add Two Numbers
- leetcode 002 Add Two Numbers(java)
- 【LeetCode002-003算法/编程练习C++】---Add Two Numbers||寻找最长无重复字母子串。//第三题之后有空要再想一想…
- LeetCode002__Add Two Numbers
- LeetCode 002 Add Two Numbers
- LeetCode 002-Add Two Numbers