2. Add Two Numbers

2023-05-16

2. Add Two Numbers

Medium

59971568Share

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:

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

错误解法

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
      String s1 = "";
        while(l1 != null){
            int val = l1.val;
            s1 = val + s1;
            l1 = l1.next;
        }


        String s2 = "";
        while(l2 != null){
            int val = l2.val;
            s2 = val + s2;
            l2 = l2.next;
        }


        int result = Integer.parseInt(s1) + Integer.parseInt(s2);
  if(result == 0){
            return new ListNode(0);
        }
        ListNode head = new ListNode(1);
        ListNode cur = head;
        while(result != 0){
            int temp = result % 10 ;
            cur.next = new ListNode(temp);
           cur = cur.next;
            result /= 10;
        }
        return head.next;

    }
}
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1 == null && l2 == null)
            return null;
        if(l1.val == 0 && l2.val == 0)
            return new ListNode(0);
        int n1 = 0;
        int n2 = 0;
        ArrayList<Integer> list1 = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        
        while(l1 != null){
            list1.add(l1.val);
            l1 = l1.next;
        }
        while(l2 != null){
            list2.add(l2.val);
            l2 = l2.next;
        }
    
        for(int i = list1.size() - 1; i >= 0; i--){
            n1 = 10 * n1 + list1.get(i);
        }
        for(int i = list2.size() - 1; i >= 0; i--){
            n2 = 10 * n2 + list2.get(i);
        }
        
        int ret = n1 + n2;
        if(ret == 0)
            return null;
        ListNode head =  new ListNode(1);
        ListNode newHead = head;
        
        while(ret > 0){
            int d = ret % 10;
            ret /= 10;
            head.next = new ListNode(d);
            head = head.next;
        }
        return newHead.next;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCvRIy2A-1580636266837)(pic/1580633840280.png)]

正确解法

不用转换,直接读取一个,计算一个
在这里插入图片描述

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode cur = head;
        int  carry = 0;
        while(l1 != null || l2 != null){
           int x = (l1 != null) ? l1.val : 0;
           int y = (l2 != null) ? l2.val : 0;
           int sum = x + y + carry;
            cur.next = new ListNode(sum % 10) ;
            cur = cur.next;
            carry = sum / 10;//进位永远为1
            if(l1 != null)//l1和l2可能长度不一致
                l1 = l1.next;
            if(l2 != null)
                l2 = l2.next;
        }
        if(carry > 0)
            cur.next = new ListNode(carry);
        return head.next;
        
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2. Add Two Numbers 的相关文章

  • “+var === +var”内部如何工作来验证 var 是否是数字?

    看到这个问题 JavaScript 中是否有一种 内置 方法来检查字符串是否为有效数字 https stackoverflow com questions 175739 is there a built in way in javascri
  • 显示 Rownum 问题 MySQL

    我有这个查询 SET row num 0 SELECT SELECT row num row num 1 AS itempurchase code SELECT supplier code FROM qa items purchases a
  • 负值和正值之间的随机数[重复]

    这个问题在这里已经有答案了 可能的重复 在Javascript中生成特定范围内的随机数 https stackoverflow com questions 1527803 generating random numbers in javas
  • JavaScript 中的数字格式与 C# 类似

    有没有一种简单的方法可以在 JavaScript 中格式化数字 类似于 C 或 VB NET 中可用的格式化方法ToString format provider or String Format 一般来说 在 JavaScript 中设置数
  • 使用正则表达式匹配数字 - 仅数字和逗号

    我无法弄清楚如何为示例值构建正则表达式 123 456 789 12 34 1234 8 你可以帮帮我吗 什么是数字 我有一个简单的问题your 简单 问题 一个数字 到底是什么意思 Is 0一个号码 你对这个怎么看 1 Is or 一个号
  • C# 随机数生成器线程安全吗?

    Is C s Random Next https learn microsoft com en us dotnet api system random next overloads方法线程安全吗 不 从多个线程使用同一个实例可能会导致它中断
  • 如何在ios上正确格式化货币

    我正在寻找一种在不使用 TextField hack 的情况下将字符串格式化为货币的方法 例如 我想将数字 521242 转换为 5 212 42 或者 如果我有一个低于 1 美元的数字 我希望它看起来像这样 52 gt 0 52 Than
  • 需要解释“~0”与“2**64”(带和不带“使用整数”)

    我编写了一些测试程序打印的值 0 and 2 64 usr bin perl use warnings use strict use integer print 0 n print 2 64 n Without use integer程序输
  • 在数基之间转换数字

    我正在开发一个在数字基数之间进行转换的程序 例如八进制是 8 十进制是 10 字母A to Z可以被视为基数 26 我想将 A 转换为0 Z转换为25 AA 转换为27 BA 转换为53 在开始编码之前 我会在纸上进行编码 以便我了解整个过
  • 在 xsl 中格式化科学数字表示形式

    我的 XML 中有以下值 1 8959581529998104E 4 我想将其格式化为使用 XSL 给我的确切数字 0 000189595815299981 format number 1 8959581529998104E 4 0 000
  • 如何根据 Haskell 中的区域设置格式化数字?

    在Python中我可以使用locale format根据区域设置漂亮地打印数字 gt gt gt import locale gt gt gt locale setlocale locale LC ALL en US UTF 8 en US
  • 生成偶数随机数

    我需要一个代码来仅生成随机偶数 2 100网上有生成随机数的教程 但它们有奇数和偶数 请理解我只需要生成偶数 1 生成数字1 50 2 将所有数字乘以2 所有数字乘以 2 都是偶数
  • 如何获取数字小数部分的长度?

    如何找出小数的小数部分的长度或位数 我可以看到一些方法 例如像这样的字符串 public static int getNumberOfFractionDigits Number number Double fractionPart numb
  • 如何编写一个快速函数来计算数字的总除数?

    我必须找到给定数字 N 的除数总数 其中可以大到 10 14 我尝试计算最多 10 7 的素数 然后使用素数因子的指数找到除数 但是事实证明它太慢了 因为使用筛子找到素数需要 0 03 秒 如果可能的话 如何更快地计算除数总数而不计算素数
  • 使用 f:convertNumber 时设置小数点分隔符

    我想知道如何在 JSF 应用程序上设置默认的小数点分隔符 我有一些
  • 如何正确对整数数组进行排序

    尝试从我知道仅包含整数的数组中获取最高和最低值似乎比我想象的更难 var numArray 140000 104 99 numArray numArray sort console log numArray 我希望这能显示99 104 14
  • Go中如何生成固定长度的随机数?

    在 Go 中生成固定长度随机数的最快 最简单的方法是什么 假设要生成8位长数字 问题是rand Intn 100000000 是结果可能远小于 8 位数字 并且用前导零填充它对我来说看起来不是一个好的答案 也就是说 我更关心随机性的质量 因
  • 使用 QuasirandomGenerator (对于傻瓜来说)

    我是 CUDA 的新手 我正在努力在内核中生成随机数 我知道有不同的实现 而且 在 SDK 4 1 中有一个 Niederreiter 拟随机序列生成器的示例 我不知道从哪里开始 我有点悲伤 感觉自己像个傻瓜 有人可以制作一个使用 Nied
  • 在bash中生成不重复的随机数序列

    今晚我一直在忙着学习 bash 我一直在尝试创建一个随机数字序列 该序列使用一个范围内的所有数字 并且每个数字只使用一次 因此 输入 1 5 的范围将输出 4 3 5 2 1 或 2 5 1 3 4 等 我在这件事上陷入了困境 Thanks
  • 如何将数字(如 int)转换为“Number”?

    这可能是基本问题 但我找不到有用的东西 问题是 如何转换double or int价值Number类型 更具体地说oracle jbo domain Number 我尝试了以下方法 对于整数值 int i 9 Integer y new I

随机推荐

  • Android中的IPv6

    什么是IPv6 IPv6 的全称是Internet Protocol version 6 Internet Protocol 译为 互联网协议 xff0c 所以 IPv6 就是互联网协议第6版 它对比于 IPv4 所带来的是地址池的扩容 x
  • 浅谈Android下的注解

    什么是注解 java lang annotation xff0c 接口 Annotation xff0c 在JDK5 0及以后版本引入 注解是代码里的特殊标记 xff0c 这些标记可以在编译 类加载 运行时被读取 xff0c 并执行相应的处
  • 浅析Java中的final关键字

    一 final关键字的基本用法 在Java中 xff0c final关键字可以用来修饰类 方法和变量 xff08 包括成员变量和局部变量 xff09 下面就从这三个方面来了解一下final关键字的基本用法 1 修饰类 当用final修饰一个
  • volatile与Java内存模型

    1 volatile特点 volatile的两大特点是可见性和有序性 xff1b volatile的内存语义 xff1a 当写一个volatile变量时 xff0c JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中 当读一个v
  • 隐藏Detected problems with API compatibility警告弹窗

    如果在Android9 0亦即API 28或以上的系统中运行debug app时 xff0c 出现如下警告弹窗 xff1a Detected problems with API compatibility visit g co dev ap
  • JAVA中枚举如何保证线程安全

    枚举类型到底是什么类呢 xff1f 是enum吗 xff1f 明显不是 xff0c enum就和class一样 xff0c 只是一个关键字 xff0c 他并不是一个类 xff0c 那么枚举是由什么类维护的呢 xff0c 首先写一个简单的枚举
  • ‘sed‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    在使用adb命令查看task和Activity的时候 xff0c 发现报错 sed 不是内部或外部命令 xff0c 也不是可运行的程序 或批处理文件 看样子是没有配置sed的环境变量 xff0c 或者没有sed工具 从网上找了一下 xff0
  • win11 我们无法设置移动热点

    有可能是因为Windows移动热点服务被禁用 启动移动热点服务 1 使用该配件的键 43 热键启动运行 WindowsR 2 要打开 服务 xff0c 请在 打开 框中键入此文本并单击 确定 xff1a services msc 3 选中W
  • 链栈(java 实现)

    Node类 xff1a package LinkStack public class Node String name int age Node next public Node public Node String name int ag
  • Android之WindowManager介绍

    WindowManager android中真正展示给用户的是window和view activity在android中所其的作用主要是处理一些逻辑问题 xff0c 比如生命周期的管理 建立窗口等 在android中 xff0c 窗口的管理
  • https://dl.bintray.com/umsdk/release/com/facebook/react/react-native/maven-metadata 502 Bad Gateway

    https dl bintray com umsdk release com facebook react react native maven metadata xml 39 Received status code 502 from s
  • Android UI深度理解:Activity UI视图结构

    Activity UI视图结构 每个Activity都会获得一个窗口 xff0c 那就是Window xff0c 它用于绘制用户的UI界面 Window是一个抽象类 xff0c 提供了绘制窗口的一组通用API xff0c PhoneWind
  • 学习嵌入式必读十本书,从C语言到ARM

    学习嵌入式必读的十本书籍 xff0c 按照C语言 数据结构 Linux C 43 43 QT 单片机 ARM的顺序给大家推荐 01 C语言 凡是计算机 电子 通信 自动化 机械专业的同学 xff0c 大一的时候必学C语言 xff0c 而且大
  • 研一(研究生)看论文文献必须要知道的几个网站

    找论文看文献必备的几个网站 明确研究方向查找论文看英文文献看文献方法想说的几句话 明确研究方向 刚进入研究生阶段的同学们都干劲十足 xff0c 充满无限期待 但是没有正确的方向很容易让你的努力白费 xff0c xff08 有人会说丰富了自己
  • 【网络教程】群晖自动更新 Docker 映像与容器(Watchtower)【转】

    群晖自动更新 Docker 映像与容器 xff08 Watchtower xff09 更多内容
  • git多账号配置

    什么叫多账号配置 xff0c 也就是说假如你在公司用的gitlab服务器 xff0c 但是自己还有用到GitHub xff0c 那么此时你在本地就需要配置多个ssh key 步骤如下 xff1a 利用ssh keygen t rsa f g
  • Ubuntu 18.04和windows建立共享文件夹

    1 安装samba sudo apt install samba sudo apt install cifs utils 2 创建共享目录 mkdir home yourname share yourname是home下一个文件夹 xff0
  • Linux权限详解,多用户多组各种权限配置原理

    网上有太多关于Linux权限详解 xff0c 这里不啰嗦那些 主要解释下这些权限是杂用的 xff0c 否则知道了什么用户 组之类的权限也配不好 一 权限分类 r xff1a 读取权限 xff0c 数字代号为 34 4 34 w xff1a
  • 1.tow sum

    文章目录 题目c 43 43 版本java版本利用hashmap正确做法 题目 Two Sum Easy Given an array of integers return indices of the two numbers such t
  • 2. Add Two Numbers

    2 Add Two Numbers Medium 59971568Share You are given two non empty linked lists representing two non negative integers T