码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode算法题 菜鸟总结 持续更新中

时间:2017-10-05 16:48:06      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:blog   etc   技巧   结果   com   更新   菜鸟   sum   指针   

  近期准备抽出一点时间,刷一些题防止手生,毕竟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算法题 菜鸟总结 持续更新中

标签:blog   etc   技巧   结果   com   更新   菜鸟   sum   指针   

原文地址:http://www.cnblogs.com/xueyudlut/p/7629331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!