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算法题 菜鸟总结 持续更新中的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode动态规划题总结持续更新

LeetCode双指针题总结(持续更新)

LeetCode链表题总结(持续更新)

LeetCode思维向题笔记总结(持续更新)

LeetCode二叉树题总结(持续更新)

leetcode动态规划题组笔记以及总结(持续更新)