LeetCode算法题2解题思路

原题

2. Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

1
2
3
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

原题地址:https://leetcode.com/problems/add-two-numbers/

思路

前置知识

首先此题需要掌握链表的知识,不仅要知道链表的构造,还要会自己用代码实现一个链表。

错误思路

首先,这题我经历了6连跪,每次都觉得差不多的时候,提交的结果都是wrong。
根据一个一个出错的测试用例,我发现是自己想偷懒的思维方式导致的。

偷懒的想法

遍历出链表的每个值后把它们各自处理成两个整数,然后用这两个整数相加得到总和之后,在把总和处理成链表输出。但是忘记处理了l.Val=0的情况,导致很多计算错误的问题。

更正思维

问题:

  • 先把链表转整数,再把结果转链表,要两次for循环
  • 转整数过程中有一些情况很难想到,覆盖不全,导致连跪好几次

方法:

  • 放弃转整数的想法,每次循环单独处理,设置进位标志即可覆盖所有情况
  • 用一次for循环,遍历l1和l2的时候同时也就生成结果链表

代码仅供参考。

代码实现

Golang实现

https://github.com/cook-coder/my-leetcode-solution/tree/master/medium/2

成绩不稳定

一会执行时间可以超越100%

一会执行时间又会翻倍

百思不得其解,希望有高人可以指点一二。

加载评论框需要科学上网