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%提交者)
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)】
- 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(所有根到叶子结点组组成的数字相加)】
- 【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
- 【LeetCode-面试算法经典-Java实现】【006-ZigZag Conversion(Z字型转换)】
- 一步步学习数据结构和算法之常用排序效率分析及java实现
- 一步步学习数据结构和算法之希尔排序效率分析及java实现
- 【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正则表达式匹配)】
- 【LeetCode-面试算法经典-Java实现】【014-Longest Common Prefix(最长公共前缀)】
- 【LeetCode-面试算法经典-Java实现】【004-Median of Two Sorted Arrays(两个排序数组的中位数)】
- 【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 【LeetCode-面试算法经典-Java实现】【011-ContainerWithMostWater(容纳最多的水)】
- 【LeetCode-面试算法经典-Java实现】【007-Reverse Integer(翻转整数)】
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】
- 一步步学习数据结构和算法之堆排序效率分析及java实现
- 【LeetCode-面试算法经典-Java实现】【009-Palindrome Number(回文数)】