Add Two Numbers

Add Two Numbers

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 numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

错误解法:由于数太长。用int,long存不下,导致结果错误。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null) return l2;
        if(l2==null) return l1;
        ListNode node1=l1;
        ListNode node2=l2;
        int a =0,b=0;
        int c=1;
        while(node1!=null) {
        	a+=(c*node1.val);
        	c=c*10;
        	node1=node1.next;
        }
        c=1;
        while(node2!=null){
        	b+=(c*node2.val);
        	c=c*10;
        	node2=node2.next;
        }
        int d=a+b;
        
        String res=Integer.toString(d);
        ListNode l3=new ListNode(0);
        ListNode node3=l3;
        for(int i=res.length()-1;i>=0;i--){
        	node3.val=(int)(res.charAt(i))-(int)('0');
        	if(i>0){
        		node3.next=new ListNode(0);
        		node3=node3.next;
        	}
        }
        return l3;
    }
}

正确解法。空间效率极差。肯定还有更好的解法,没工夫研究,待续……

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null) return l2;
        if(l2==null) return l1;
        ListNode node1=l1;
        ListNode node2=l2;
        List<Integer> list1=new ArrayList<Integer>();
        List<Integer> list2=new ArrayList<Integer>();
        
        while(node1!=null) {
            list1.add(node1.val);
            node1=node1.next;
        }
       
        while(node2!=null){
            list2.add(node2.val);
            node2=node2.next;
        }
        
        while(list1.size()<list2.size()) list1.add(0);
        while(list2.size()<list1.size()) list2.add(0);
        
        ListNode l3=new ListNode(0);
        ListNode node3=l3;
        int tmp=0;
        for(int i=0;i<list1.size();i++){
            int a=list1.get(i)+list2.get(i)+tmp;
            if(a>=10){
                node3.val=a-10;
                tmp=1;
            }
            else{
                node3.val=a;
                tmp=0;
            }
            if(i<list1.size()-1){
                node3.next=new ListNode(0);
                node3=node3.next;
            }
        }
        
        if(tmp==1){
            node3.next=new ListNode(tmp);
        }
        return l3;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109425.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springcloud seata_seata github

    springcloud seata_seata github111

    2022年8月21日
    4
  • python进制转换代码_十进制转八进制python

    python进制转换代码_十进制转八进制python本文实例讲述了Python实现的十进制小数与二进制小数相互转换功能。分享给大家供大家参考,具体如下:十进制小数⇒二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位如:0.25的二进制0.25*2=…

    2022年9月16日
    0
  • 快速排序(Python实现)

    一、算法介绍快速排序是经常考查到的排序算法,这里对快排算法做一下总结。快速排序是“交换”类的排序,它通过多次划分操作实现排序!以升序为例,其执行流程可以概括为:每一趟排序选择当前所有子序列的一个关键字(通常是第一个)作为枢轴量,将子序列中比枢轴量小的移到枢轴前边,比枢轴大的移到枢轴后边,具体过程是一个交替扫描和交换的过程。当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列,…

    2022年4月6日
    47
  • JVM初探(一):jvm内存结构[通俗易懂]

    JVM初探(一):jvm内存结构[通俗易懂]一、概述我们知道java代码先编译为.class文件,然后再将.class文件交由jvm执行。在程序运行的这一过程中,jvm会将其管理的内存空间划分为不同的区域,这些区域各有各的用途,我们将其分为五

    2022年8月16日
    3
  • linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用

    linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用Linux如何查看端口是否被占用Linux如何查看端口是否被占用?下面为大家推荐两种检测方法,对Linux系统不熟悉的小伙伴可以看看。1、使用lsof命令lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:lsof-i:port_…

    2022年10月27日
    0
  • Pytest(8)parametrize参数化[通俗易懂]

    Pytest(8)parametrize参数化[通俗易懂]前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年7月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号