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


相关推荐

  • 六大设计原则详解

    六大设计原则详解

    2022年3月7日
    33
  • Burp Suite安装配置详解(附Java 环境安装)

    Burp Suite安装配置详解(附Java 环境安装)BurpSuite安装配置详解1.Java安装与环境配置详解1.0下载JavaSDK1.8最新版2.0配置Java环境变量功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,…

    2022年7月12日
    50
  • Drupal Views教程[通俗易懂]

    Drupal Views教程[通俗易懂](一):简介打个比方来说明一下Views的作用:Drupal的核心就像一个毛坯房,墙窗户门都有了,也简单的粉刷过了,搬进来也能住;外观主题(Theme)就像室内装修,可以按照自己的喜好来铺地板或是地毯,选择各种各样喜欢的墙纸等等;模块呢,就好比家具,电器之类的,有了模块可以方便实现各种方便的功能,大部分模块都像冰箱电视一样,启动,摆在那里就行了,但是有些模块可以说是大工程,譬如C

    2022年5月4日
    75
  • GoLand2021.5.1激活码【注册码】

    GoLand2021.5.1激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    35
  • golang激活(在线激活)「建议收藏」

    golang激活(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    61
  • 前端面试选择题_vue最新面试题

    前端面试选择题_vue最新面试题面试题集合1、v-model是什么?vue中标签怎么绑定事件?答:v-model这个指令只能用在表单元素上,可以用他进行双向数据绑定。绑定事件:&lt;input@click=doLog()/&gt;2、mvvm框架是什么?说说对双向数据绑定的理解?它和其它框架(jquery)的区别是什么?哪些场景适合?答:mvvm的m模型就是用来定义驱动的数据、v经过数据改变后的html、vm就是连接数据…

    2022年9月3日
    5

发表回复

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

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