leetcode算法题:两数相加(Java实现-效率超过100%提交者)

难度:中等

题目:

英文:
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.

中文翻译:
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。

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

示例:

这里写图片描述

编程初始界面:

/**
 * 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) {

    }
}

leetcode开始答题传送门:
https://leetcode-cn.com/problems/add-two-numbers/description/

我的解答:

/**
 * 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) { 

        //==========预处理,保证计算不出nullpointer错
        if(l1 == null){
            l1 = new ListNode(0);
        }
        if(l2 == null){
            l2 = new ListNode(0);
        }
        //========================================


         if(l1.next==null && l2.next==null){//最小情况
             int val = l1.val+l2.val;
             if(val>9){
                 ListNode node = new ListNode(val%10);//设置第二位
                 node.next = new ListNode(val/10);//设置第一位
                 return node;
             }else
             return new ListNode(val);
         }else {//可继续迭代的情况
             int val = l1.val+l2.val;
             if(val>9){
                 val = val-10;
                 if(l1.next!=null)  l1.next.val++;
                 else if(l2.next!=null)  l2.next.val++;
                 //else //不存在的,必为上述两种情况之一。
             }

             ListNode node = new ListNode(val);
             //开始迭代
             node.next = addTwoNumbers(l1.next,l2.next);
             return node;
         }
    }  
}

算法描述:采用了递归实现,时间复杂度O(n),花了我大半个小时解决这个问题,说明我对递归算法的使用还有待提高啊。此外,这里还看到了链表的一种Java实现方式。

执行结果(效率超100%提交者)

leetcode算法题:两数相加(Java实现-效率超过100%提交者)_第1张图片

你可能感兴趣的:(算法)