您的位置:首页 > 编程语言 > Java开发

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

2018-04-04 00:57 681 查看

难度:中等

题目:

英文:

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);
}
//==============
4000
==========================

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%提交者)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐