(一百零一)LeetCode 1 两数相加
发布日期:2021-06-30 15:25:25
浏览次数:2
分类:技术文章
本文共 4544 字,大约阅读时间需要 15 分钟。
1.题目
2.解答
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode lhead = new ListNode(0); ListNode literator = lhead; lhead.val = l1.val + l2.val; while(l1.next!=null && l2.next!=null){ literator.next = new ListNode(l1.next.val + l2.next.val); literator = literator.next; l1 = l1.next; l2 = l2.next; } if (l1.next == null && l2.next != null){ literator.next = l2.next; }else if (l1.next != null && l2.next == null){ literator.next = l1.next; } return lhead; }}
3.验证失败
没考虑十进一
4.修改
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode lhead = new ListNode(0); ListNode literator = lhead; lhead.val = l1.val + l2.val; if (lhead.val >= 10){ lhead.val -= 10; literator.next = new ListNode(1); } while(l1.next!=null && l2.next!=null){ literator.next = (literator.next == null) ? new ListNode(l1.next.val + l2.next.val) :new ListNode (literator.next.val + l1.next.val + l2.next.val) ; literator = literator.next; if(literator.val >= 10){ literator.val -= 10; literator.next = new ListNode(1); } l1 = l1.next; l2 = l2.next; } if (l1.next == null && l2.next != null){ if(literator.next != null){ l2.next.val++; } literator.next = l2.next; while (l2.next.val >= 10){ l2.next.val -= 10; l2 = l2.next; if(l2.next == null){ l2.next = new ListNode(1); }else{ l2.next.val++; } } }else if (l1.next != null && l2.next == null){ if(literator.next != null){ l1.next.val++; } literator.next = l1.next; while (l1.next.val >= 10){ l1.next.val -= 10; l1 = l1.next; if(l1.next == null){ l1.next = new ListNode(1); }else{ l1.next.val++; } } } return lhead; }}
有冗余代码,遇十进一的代码写了四次,可以抽取出来。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode lhead = new ListNode(0); ListNode literator = lhead; lhead.val = l1.val + l2.val; while(l1.next!=null && l2.next!=null){ literator.next = new ListNode(l1.next.val + l2.next.val); literator = literator.next; l1 = l1.next; l2 = l2.next; } if (l1.next == null && l2.next != null){ literator.next = l2.next; }else if (l1.next != null && l2.next == null){ literator.next = l1.next; } tenToOne(lhead); return lhead; } private void tenToOne(ListNode l){ ListNode literator = l; while(literator != null){ if(literator.val >=10){ literator.val -= 10; if(literator.next == null){ literator.next = new ListNode(1); break; }else{ literator.next.val++; } } literator = literator.next; } return; }}
5.验证提交
优化前:
优化后
但是这个时间不准确,再次执行表明我的代码还是很low
因为我的优化只是代码量的优化,算法还是一样的。
参考答案:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) { int x = (p != null) ? p.val : 0; int y = (q != null) ? q.val : 0; int sum = carry + x + y; carry = sum / 10; curr.next = new ListNode(sum % 10); curr = curr.next; if (p != null) p = p.next; if (q != null) q = q.next; } if (carry > 0) { curr.next = new ListNode(carry); } return dummyHead.next;}
转载地址:https://jiatai.blog.csdn.net/article/details/83211395 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月11日 17时08分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python实现决策树 Desision Tree & 可视化
2019-04-30
决策树 Decision tree
2019-04-30
nominal和ordinal & 数据处理中四种基本数据类型
2019-04-30
MATLAB与CUDA
2019-04-30
Linux png转jpg (convert命令)
2019-04-30
Ubuntu更新后终端中字体的颜色全是白色
2019-04-30
vscode git
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2PSK
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——DSB
2019-04-30
HDU - 1166 敌兵布阵 (树状数组模板题/线段树模板题)
2019-04-30
CodeForces - 456C Boredom (dp)
2019-04-30
CodeForces - 675A Infinite Sequence(简单数论 细节)
2019-04-30
CodeForces - 1042B Vitamins (思维)
2019-04-30
ACM 2013 长沙区域赛 Collision (几何)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30
CodeForces - 931B World Cup (思维 模拟)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30