java - 给定存储两个数字的数字的 LinkedList,将这些数字相加
问题描述
嗨,我正在尝试解决一些问题,但无法识别我的错误.. :(
问题描述:
给定两个代表两个非负整数的非空链表。这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。将两个数字相加并将总和作为链表返回。
您可以假设这两个数字不包含任何前导零,除了数字 0 本身。
示例:
输入:l1 = [2,4,3],l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807。
我的代码:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
String firstNumber = "";
String secondNumber = "";
// Converts the lists into strings
while (l1 != null){
firstNumber += Integer.toString(l1.val);
l1 = l1.next;
}
while (l2 != null){
secondNumber += Integer.toString(l2.val);
l2 = l2.next;
}
// Reverses the strings
firstNumber = new StringBuilder(firstNumber).reverse().toString();
secondNumber = new StringBuilder(secondNumber).reverse().toString();
long additionLong = Long.parseLong(firstNumber) + Long.parseLong(secondNumber);
ListNode solutionList = new ListNode();
ListNode prevNode = new ListNode();
ListNode currentNode = solutionList;
while (additionLong > 0){
currentNode.val = (int) additionLong % 10;
additionLong /= 10;
ListNode nextNode = new ListNode();
currentNode.next = nextNode;
prevNode = currentNode;
currentNode = currentNode.next;
}
prevNode.next = null;
return solutionList;
}
}
我无法通过以下测试,我似乎无法确定问题所在。
输入
l1 = [9]
l2 = [1,9,9,9,9,9,9,9,9,9]
我的输出
[8,0,0,0,0,0,0,0,0,0,1]
预期的
[0,0,0,0,0,0,0,0,0,0,1]
我怀疑麻烦的步骤是当我将两个反向字符串加在一起时,但代码确实通过了其他一些测试,所以我不知道为什么它不会通过这个..
另外,到目前为止,在我的学位课程中,我们只有两门非常基础的 Java 和 C 入门课程,而且我们只涵盖了基础知识,所以我们并没有真正学会如何很好地编写代码。如果我在代码中做了一些愚蠢的事情请让我知道,所以我知道要避免它。:)
解决方案
如果你有一把锤子,每个问题看起来都像钉子。
使用字符串是一样的。
而是展示一种更抽象的方法。
如果你有 67 [7, 6] 和 398 [8, 9, 3] 你会怎么加?
- 7+8 给 5 进位 1
- 6+9+进位 6 进位 1
- N/A+3+进位 4 进位 0
- N/A+N/A+随身携带 N/A
所以:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode sum = null;
ListNode last = null;
int carry = 0;
while (l1 != null || l2 != null) {
int sum = carry;
if (l1 != null) {
sum += l1.value;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.value;
l2 = l2.next;
}
carry = 0;
if (sum >= 10) {
carry = 1;
sum -= 10;
}
ListNode sumNode = ...
...
}
if (carry != 0) { // An extra digit.
...
}
return sum;
}
推荐阅读
- haskell - 为什么 Data.Vector.Mutable read() 会在 monad 中返回,因为它是一个不可变的操作?
- flutter - 使用 Provider 的长度为空
- ios - 有没有办法像我们在 iOS 中那样在 macOS 下将用户发送到应用程序的隐私设置?
- lua - 在玩家点击特定键后,如何让这个脚本停止将鼠标的点击坐标发送到服务器?
- laravel - Lumen Database Queued Event Listener 事件消失
- opengl - 将间接命令绑定为 draw_indirect_buffer 和原子计数器会导致崩溃
- css - 默认的 CSS 缓动曲线是什么?
- android - 如何区分运行在 Android 和传统 Linux 上的 ELF 文件?
- c++ - macos GCC 工具链编译简单的 hello world 的问题
- r - 为什么标签()返回给“级别=”的内容,反之亦然?