我的输出中有一个额外的 0,为什么会这样
My output have an extra 0 in it, why is that
所以我正在对leetcode进行练习,这就是问题:
您将获得两个非空链表,代表两个非负 整数。数字以相反的顺序存储,每个节点 包含一个数字。将两个数字相加并将其作为链表返回。
您可以假设这两个数字不包含任何前导零,除了 数字 0 本身。
例:
输入: (2 -> 4 ->3( + (5 -> 6 -> 4(
输出: 7 -> 0 -> 8
说明:342 + 465 = 807。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
这是我的解决方案:
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
vector<int> V1;
vector<int> V2;
int sum1 = 0;
int sum2 = 0;
ListNode *result = new ListNode(0);
auto l0 = result;
while(l1) {
V1.push_back(l1->val);
l1=l1->next;
}
for (auto it1 = V1.rbegin(); it1 != V1.rend(); it1++) {
sum1 = sum1 * 10 + (*it1);
}
while(l2) {
V2.push_back(l2->val);
l2=l2->next;
}
for (auto it2 = V2.rbegin(); it2 != V2.rend(); it2++) {
sum2 = sum2 * 10 + (*it2);
}
int sum3 = sum1 + sum2;
while (sum3 !=0) {
int extract = sum3 % 10;
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}
return result;
}
};
当我运行它时,我的输出中总是有额外的 0,例如:
您的意见 [7,2,7] [2,4,2]
你的答案 [0,9,6,9]
预期答案 [9,6,9]
我知道有一个更聪明的方法可以解决这个问题,但我想先尝试用我的方式解决它
这是因为您正在创建第一个具有 0 的节点。您有两种解决方案:
-
跳过函数末尾的第一个元素(解决方法(:
ListNode* aux = result; result = result->next; delete aux; return result;
-
不将列表节点初始化为零,而是使用空指针:
s
ListNode *result = nullptr;
// More code...
while (sum3 !=0) {
int extract = sum3 % 10;
if (l0 == nullptr) {
result = new ListNode(extract);
l0 = result;
}
else
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}
Ofc,有更好的解决方案。您可以直接进行求和,而无需使用额外的向量/内存。
您得到一个额外的零,因为您正在执行比要求多 1 次remainder
和division
操作。 您必须在最后一个while
循环下修改条件。
while (sum3 > 9) {
int extract = sum3 % 10;
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}
相关文章:
- 为什么输出精度没有正确舍入?
- 为什么输出窗口上没有显示输出?
- 为什么输出是整数而不是双精度?
- 为什么输出总是空的?
- 为什么输出流首选" "而不是""?
- 为什么输出不同以及此代码中有什么错误
- 为什么输出在睡眠后没有换行符?
- 为什么输出会进入无限循环
- 为什么输出错误崩溃
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 任何人都可以解释此程序的类型促销以及为什么输出相同
- 为什么输出不是 00706
- C++:为什么输出迭代器不支持比较操作?
- 为什么输出是 2 而不是 7 ?+ 号如何使它与众不同
- 什么是bad_alloc?为什么输出屏幕没有显示所有值
- 为什么输出是无限的?
- 我无法理解为什么输出在这个 for 循环中出现 10
- 为什么输出有时会失败
- C 参考和类对象的非参考返回 - 为什么输出相同
- 为什么输出中缺少字母'D'?