2019年9月4日
题目:
解决方法:
1、双指针,链表遍历,逐位相加
package leetCode.middle;
/**
* leetCode:middle 2 两数相加
*
* @author moubin.mo
* @date: 2019/9/4 16:59
*/
public class SumOfTwoLinks {
public static void main(String [] args){
ListNode l1 = new ListNode(2);
l1.next = new ListNode(4);
l1.next.next = new ListNode(3);
ListNode l2 = new ListNode(5);
l2.next = new ListNode(6);
l2.next.next = new ListNode(4);
ListNode result = addTwoNumbers(l1, l2);
while (result != null){
System.out.print(result.val);
result = result.next;
}
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2){
// 双指针
ListNode l4 = new ListNode(0);
ListNode l3 = l4;
// 进位标志
int flag = 0;
// 位运算
while (l1 != null || l2 != null){
// 求和
int val1 = l1==null ? 0 :l1.val;
int val2 = l2==null ? 0 :l2.val;
int sum = val1 + val2 + flag;
// 计算进位
flag = sum / 10;
sum = sum % 10;
// 创建新节点
l3.next = new ListNode(sum);
// 将游标值设置进目标链表
l3 = l3.next;
l1 = (l1 != null)?l1.next:null;
l2 = (l2 != null)?l2.next:null;
}
// 设置最高位元素
if (flag > 0) {
l3.next = new ListNode(flag);
}
return l4.next;
}
}
/** 一个节点 */
class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
思路:
- 遍历两个链表,直到两个链表都被遍历结束,此时如有进位,游标指针会指向最高位,跳出循环后创建最高位节点;
性能结果:
2、网友解法:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode resultList = new ListNode(0);
int cache = 0;
ListNode l3 = resultList;
while (l1 != null || l2 != null || cache > 0){
int l1Val = l1 == null ? 0 : l1.val;
int l2Val = l2 == null ? 0 : l2.val;
int l3Val = l1Val + l2Val + cache;
cache = 0;
// 判断是否大于 9 大于9 进一位
if (l3Val > 9){
cache = 1;
l3Val = l3Val - 10;
}
l3.next = new ListNode(l3Val);
l3 = l3.next;
l1 = l1 == null ? l1 : l1.next;
l2 = l2 == null ? l2 : l2.next;
}
return resultList.next;
}
}
作者:zhaoyuening
链接:https://leetcode-cn.com/problems/add-two-numbers/solution/zhi-xing-yong-shi-8-ms-nei-cun-xiao-hao-406-mb-by-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:
- 8 ms 内存消耗 : 40.6 MB
- 区别在这个进位方式,用的是判断;这里有个知识点:在计算机运算中,除法是比逻辑判断要消耗资源的,所以这里做了一个改善(虽然不好看,但确实结果显示更好了)
其他:
寄语自己,过去的两个月,工作实在太饱和了,导致没有时间来提高程序员内功,现在这段时间没有那么忙,可以安静下来好好听歌写代码了。加油,这毕竟只是中等级别的一题。