Leetcode 2. Add Two Number
来源:互联网 发布:阿里云客服是干嘛的 编辑:程序博客网 时间:2024/06/05 00:43
题目描述:
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
解析:
刚开始刷leetcode,对于很多算法方面的了解还需要训练,这道题刚开始想的比较简单,以为就是一个简单的链表相加,与之前写的多项式类似,但后来提交的过程中确实出现了不少问题,总结一下,关于两数相加大体上分为以下集中情况:
(1)、位数相等的两数相加:
如44+55,因为位数相等,则每一位直接相加即可,同时设置add存储进位,每次用(val1+val2+add)/10得到结果,同时更新进位标志。
(2)、位数相等的两数相加,结果有进位:
如55+45,当循环结束时,add位不为零,需要将add位结果输出。
(3)、位数不等的两数相加:
如89+1,因为位数不等,所以当位数较少的列表先遍历完成后,遍历另一个列表,依次将该列表中的每一位数与add相加,同时更新add值,至另一个列表遍历完成。
原始代码:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head=null;<span style="white-space:pre"></span>//指向result头部 ListNode result=null; boolean flag=false;<span style="white-space:pre"></span>//标志是否为第一个值,决定result是否等于其本身 ListNode temp1=l1; ListNode temp2=l2; int add=0;<span style="white-space:pre"></span>//进位标志 while(true){ int num=temp1.val+temp2.val+add; add=num/10; int renum=num%10; ListNode temp=new ListNode(renum); temp1=temp1.next; temp2=temp2.next; if(flag==false){ result=temp; head=result; flag=true; }else{ result.next=temp; result=result.next; } if(temp1==null){ while(temp2!=null){ int s=temp2.val; temp2.val=(s+add)%10; add=(s+add)/10; result.next=temp2; temp2=temp2.next; result=result.next; } break; } if(temp2==null){ while(temp1!=null){ int s=temp1.val; temp1.val=(s+add)%10; add=(s+add)/10; result.next=temp1; temp1=temp1.next; result=result.next; } break; } } if(add!=0){ //最终进位标志 ListNode last=new ListNode(add); result.next=last; } return head; }}
总结:
这道题其实挺简单的,但是好久不刷题的原因,导致自己其实花了不少时间,最终写的代码也没好好优化,就是一个粗略的想法,但我觉得题还是要自己去想才能有进步,哪怕暂时想的没有别人写的那么好,也是自己思考的结果,得到的东西才是自己的。写这篇博客,也是希望自己能坚持下去,勿忘初心,厚积薄发。
- Leetcode 2. Add Two Number
- [Leetcode] Add Two Number
- 【leetcode】 add two number
- LeetCode(Add Two Number)
- LEETCODE: Add Two Number
- leetcode-Add Two Number
- LeetCode Add Two Number
- Add Two Number - Leetcode
- LeetCode - Add Two Number
- LeetCode---(2) Add Two Number
- leetcode--P2 Add Two Number
- 【LeetCode】 002. Add Two Number
- leetcode algorithm2 add two number
- LeetCode笔记 -- Add Two Number
- LeetCode 2 Add Two Number
- 2.Add Two Number
- Leetcode练习-Add Two Number
- LeetCode算法题目:Add-Two-Number解决
- 十六、自定义联系人导航(下)---RecyclerView增加头部和事件监听
- 【树5】二叉搜索树的后序遍历序列
- 【Android开发】Volley学习笔记
- 解决方案---此 ObjectContext 实例已释放,不可再用于需要连接的操作
- commonJS.js常用函数集
- Leetcode 2. Add Two Number
- 合并两个shape文件并删除冗余信息
- 优秀计算机发展历史视频
- Atitit.事件机制 与 消息机制的联系与区别
- 树状数组模板
- 推荐!国外程序员整理的Java资源大全
- kafka进击之路(三) ——consumer high API开发
- 关于布局属性的那些事(笔记)
- Lua的基础知识点