2_Add Two Number
2015-09-21 20:43
239 查看
一、题目
题目描述:
传入2个链表,比如2->4->3其实表示的是342,5->6->4其实表示的是465,将2个链表相加,也就是342+465=807,然后将807反转为链表7->0->8。其实就是大数相加问题。
二、解决
思路:通过2个链表同时扫描,用大数相加的方法,c表示进位,num表示当前的值,从头扫描到最后
public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
int num = l1.val + l2.val;
int c = 0;
if (num > 9){
c = num / 10;
num %= 10;
}
ListNode current = new ListNode(num);
ListNode result = current;
l1 = l1.next;
l2 = l2.next;
while (l1!=null && l2!=null){
num = l1.val + l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l1 = l1.next;
l2 = l2.next;
}
while (l1 != null){
num = l1.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l1 = l1.next;
}
while (l2 != null){
num = l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l2 = l2.next;
}
if (c != 0){
ListNode temp = new ListNode(c);
current.next = temp;
current = current.next;
}
return result;
}
题目描述:
传入2个链表,比如2->4->3其实表示的是342,5->6->4其实表示的是465,将2个链表相加,也就是342+465=807,然后将807反转为链表7->0->8。其实就是大数相加问题。
二、解决
思路:通过2个链表同时扫描,用大数相加的方法,c表示进位,num表示当前的值,从头扫描到最后
public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
int num = l1.val + l2.val;
int c = 0;
if (num > 9){
c = num / 10;
num %= 10;
}
ListNode current = new ListNode(num);
ListNode result = current;
l1 = l1.next;
l2 = l2.next;
while (l1!=null && l2!=null){
num = l1.val + l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l1 = l1.next;
l2 = l2.next;
}
while (l1 != null){
num = l1.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l1 = l1.next;
}
while (l2 != null){
num = l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l2 = l2.next;
}
if (c != 0){
ListNode temp = new ListNode(c);
current.next = temp;
current = current.next;
}
return result;
}
相关文章推荐
- PopupWindow
- 关于一个按钮绑定两个事件的问题,click和submit
- C# 中的委托和事件
- CreateProcess的命令行参数
- hdu 5463 Clarke and minecraft
- 离线编译JSX文件
- POJ 3243 Clever Y (求X^Y mod Z = K)
- 使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
- HDU 1421 搬寝室
- NFS挂载文件系统需要的内核和uboot的配置
- PAT(A)1003
- 重造轮子-random5到random7
- jquery checkbox反复调用attr('checked', true/false)只有第一次生效
- IOS开发测试之单元测试中的理论知识
- 死锁 银行家算法
- android2.3平台上web页面(html5中使用frame)不能滑动、不允许缩放的解决方法
- 自己编程实现更改电脑桌面背景并同时播放音乐
- 对象流注意点
- iOS开发脚踏实地学习day12-通讯录和plist存储
- 坦克发射炮弹打死自己的问题