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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 能向入口函数传入多个参数的 QueueUserWorkItem

    能向入口函数传入多个参数的 QueueUserWorkItem不啰嗦了,花一周时间也没赶上std::async和std::thread的设计,标准库的设计真的,很优秀。我记下这段时间里做了什么;这里包含了把函数拆成两步调用的方法,第一步传参,第二步执行;SplitInvoke;如果我能把第一步放到A线程,第二步放到B线程,就能解决std::thread潜在的两次拷贝和对象(Windows的窗口对象等)绑定到线程问题,就能制造一个优于std::…

    2022年9月24日
    2
  • 经典手眼标定算法之Tsai-Lenz的OpenCV实现

    经典手眼标定算法之Tsai-Lenz的OpenCV实现本文主要是讲解经典手眼标定问题中的TSAI-LENZ文献方法,参考文献为“ANewTechniqueforFullyAutonomousandEfficient3DRoboticsHand/EyeCalibration”,并且实现了基于OpenCV的C++代码程序,code可去CSDN资源下载。

    2022年6月11日
    33
  • Hadoop版本_Hadoop下那个版本

    Hadoop版本_Hadoop下那个版本ApacheHadoop版本分为两代:第一代Hadoop称为Hadoop1.0第二代Hadoop称为Hadoop2.0第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加了NameNodeHA等新的重大特性。第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于Hadoop1.0,是一套全新的架构,均包含HDFSFederatio

    2025年8月3日
    5
  • 2019 年 Redis面试题及答案[通俗易懂]

    2019 年 Redis面试题及答案

    2022年2月10日
    44
  • fastjson教程 List转JSONArray以及JSONArray转List[通俗易懂]

    fastjson教程 List转JSONArray以及JSONArray转List[通俗易懂]1.fastjsonList转JSONArrayList<T>list=newArrayList<T>();JSONArrayarray=JSONArray.parseArray(JSON.toJSONString(list));2.fastjsonJSONArray转ListJSONArrayarray=newJSONArray();List<T>list=JSONObject.parseArray(array.toJSONSt..

    2022年6月17日
    170
  • linux禁止防火墙命令,LINUX关闭打开防火墙命令

    Linux下打开和关闭防火墙1.及时生效,重启后复原关闭:serviceiptablesstop开启:serviceiptalbesstart查看状态:serviceiptablesstatus(关闭状态的话会提示firewalisnotrunning)2.非及时性生效,重启后永久性生效关闭:chkconfigiptbalesoff开启:chkconfigipt…

    2022年4月9日
    81

发表回复

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

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