LeetCode算法题 菜鸟总结 持续更新中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode算法题 菜鸟总结 持续更新中相关的知识,希望对你有一定的参考价值。
近期准备抽出一点时间,刷一些题防止手生,毕竟codemonkey,吃饭的手艺不能忘。
-------------------------------------------------分割线----------------------------------------------------------
简单记录下解题时的想法和遇到的坑,如果能坚持下来以后可能还会整理整理,sasa。
1,用链表计算计算加法 Add Two Numbers
对于科班出身的人对面向对象的概念都很简单,然而在实际的编程中,由于封装的原因,要考虑到各种奇葩的输入,防止你的程序异常崩溃。
回到题目,例子中给的是342+465 =807;在最开始要考虑链表是否为空的情况,在函数最开始进行判断。然后依次相加进位,输出结果。
注意:坑是在相加之后产生的进位可能会影响很多高位,例如1+999; 这种情况很容易被遗漏;
技巧:
对于本菜鸟来说,开始的时候在初始化队列头部时写的麻烦了。单独对头部进行相加之后才进入循环,因为直接进入循环处理不好实例化ListNode的时间。
然而在看过参考答案之后,为了不对头部单独进行判断,可以设置无意义的head节点,最终返回的时候return head.next;
还可以通过判断指针为空的方法,将不一样的长度的链表相加在一个while循环中计算,最后上代码:
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; }
以上是关于LeetCode算法题 菜鸟总结 持续更新中的主要内容,如果未能解决你的问题,请参考以下文章