leetcode 每日两题之两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

我的答案大概是下面这样

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       long first=getRealNum(l1);
        long second=getRealNum(l2);
        // int max=first>second?first:second;
        // int length=getLinkLength(max);
        String lastNum=first+second+"";
        // int[] nums=new int[lastNum.length];
        ListNode l=null,cur=null;
        
        for(int i=0;i<lastNum.length();i++){
            if(l==null){
                l=new ListNode(Integer.parseInt(lastNum.charAt(lastNum.length()-i-1)+""));
                cur=l;
            }else{
                cur.next=new ListNode(Integer.parseInt(lastNum.charAt(lastNum.length()-i-1)+""));
                cur=cur.next;
            }
        }
        
        return l;
    }
    
    
    public long getRealNum(ListNode l1){
         long first=0;
        first+=l1.val;
        ListNode temp1=l1;
        int weishu=0;
        while(temp1.next!=null){
            weishu++;
            temp1=temp1.next;
            first+=Math.pow(10,weishu)*temp1.val;
        }
        return first;
    }
}

当给的链表长度太长时,会有问题 后面再想想更好的解决方案吧

通过看官方的解题方案,才发现我是被示例误导了,其实没有必要去先去求本身的值然后再逆转过来,而应该充分利用链表的特征去解这道题,下面贴出官方代码。

 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode dummyHead = new ListNode(0);
    ListNode p = l1, q = l2, curr = dummyHead;
    int carry = 0;
    while (p != null || q != null) {
        int x = (p != null) ? p.val : 0;
        int y = (q != null) ? q.val : 0;
        int sum = carry + x + y;
        carry = sum / 10;
        curr.next = new ListNode(sum % 10);
        curr = curr.next;
        if (p != null) p = p.next;
        if (q != null) q = q.next;
    }
    if (carry > 0) {
        curr.next = new ListNode(carry);
    }
    return dummyHead.next;
}

作者:LeetCode
链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-xiang-jia-by-leetcode/
来源:力扣(LeetCode)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引言:用Js攻略leetcode中的算法,将会介绍自己的思路和注意点,一边学习一边愉快刷题呀。 问题1: 给定两个...
    mooory阅读 1,627评论 0 0
  • 题目 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能...
    春苟哈皮阅读 224评论 0 0
  • (1)题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它...
    赫尔特阅读 302评论 0 1
  • 2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且...
    TheKey_阅读 277评论 0 1
  • 题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...
    anloney阅读 1,150评论 1 0