问题:给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。您可以假设这两个数字不包含任何前导零,除了0本身**
示例:工作测试用例如下:-输入:(2)-
我的解决方案不适用于以下测试用例:
单链表的定义:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
这就是我的解决办法
import java.lang.Math;
class Solution
{
public ListNode addTwoNumbers(ListNode l1, ListNode l2)
{
int count = 0;
int number1=0;
int number2=0;
int temp=0;
while(l1 !=null)
{
temp = l1.val;
number1 += temp*Math.pow(10,count);
count++;
l1= l1.next;
}
count = 0;
while(l2 !=null)
{
temp = l2.val;
number2 += temp*Math.pow(10,count);
count++;
l2= l2.next;
}
int sum = number1 + number2;
ListNode l3 = new ListNode(sum%10);
ListNode l4 = l3;
while(sum!=0)
{
sum=sum/10;
if (sum!=0)
{
l3.next = new ListNode(sum%10);
l3=l3.next;
}
}
return l4;
}
}
尽管您的逻辑看起来不错,但当您遇到大型测试用例/表示为链表的大型数字时,可能会遇到溢出情况。
我给大家一个建议,不要把链表节点转换成数字。有一种方法可以通过普通的链表迭代来实现。
试着想想你通常是如何添加数字的,就像我们在学校被教导的那样,把它写在纸上。
您有整数溢出<代码>[1,9,9,9,9,9,9,9,9,9]应表示数字9 999 991。您正试图将列表转换为int
(number1
),但是int
可以容纳的最大数字是2147 483 647,因为int
是一个带符号的2位补码32位整数。
在这种情况下,如果Java抛出一个异常,让我们知道它为什么不工作,那就太好了。没有这样的运气。相反,它只是丢弃超过32位的高阶位,给出一些无意义的负值(负值,因为符号位(第一位)恰好是1)。
因此,您需要做的是直接以链表的形式执行添加,而无需转换为int
并返回。您可以轻松地拥有三个链表,每个链表最多包含11个元素(如果需要,也可以包含100万个元素),因此不会导致溢出。
如果您不知道什么是数字溢出,请查找它。你的搜索引擎就是你的朋友。
我有一个关于使用LeetCode的链表添加两个数字的问题。下面是问题本身,我面临的问题,以及我的代码。 给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。 您可以假设这两个数字不包含任何前导零,除了数字0本身。 实例 输入:(2- 问题是它打印出: 当结果出现时,它停止。val为0并调用NullPointerException。我不
2.Add Two Numbers [M] 题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbe
21. Merge Two Sorted Lists 问题 Merge two sorted linked lists and return it as a new list. 思路 这个题目很简单也有几个可以考虑的思路,一个是比较直接的方式,重新构造链表,一种是利用递归 思路1 :用新的链表 这里用了一个新的节点了保存结果的链表,这里为了方便链表的扩充,增加一个临时的节点变量(否则每次加入都要遍
问题内容: 我有两个桌子:玩具和游戏。 一个小孩可以有多个玩具。一个小孩可以一次参加多个游戏。 我想要一个查询,该查询将为我提供little_kid涉及的玩具和游戏的总数。 基本上,我想要这两个查询的总和: 是否可以在单个SQL查询中获得它?显然,我可以通过编程的方式对它们进行汇总,但这并不是很理想。 (我意识到人为的例子使模式看起来效率低下。让我们假设我们无法更改模式。) 问题答案: 包装它们并
问题内容: 我有两个数字。例如: 为什么数字不支持算术运算?无论如何,我将如何在Java中将这两个数字相加?(当然,我是从某个地方获取它们的,我不知道它们是Integer还是float等)。 问题答案: 你不知道数字是整数还是浮点数…使用该类时,编译器也不知道你的数字是整数,浮点数还是其他东西。结果,像+和-这样的基本数学运算符不起作用;计算机将不知道如何处理这些值。 开始编辑 根据讨论,我认为一
问题: 给定两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。将这两个数字相加,并以链表形式返回。 您可以假设这两个数字不包含任何前导零,除了数字0本身。 例子: 建议的解决办法: 产出:[7,0,8]; 为什么以下更改会输出[]列表。 任何建议都会有帮助。