https://leetcode-cn.com/problems/add-two-numbers/submissions/
我的方法:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution {10 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {11 ListNode ans = new ListNode(0);12 ans.next = null;13 ListNode curr = ans;14 15 int c = 0;16 while(l1.next != null && l2.next != null){17 curr.val = (l1.val l2.val c);18 c = (l1.val l2.val c)/10;19 curr.next = new ListNode(0);20 curr = curr.next;21 l1 = l1.next;22 l2 = l2.next;23 }24 //两数等长度时同时处理最后一个数即可25 if(l1.next == null && l2.next == null){26 curr.val = (l1.val l2.val c);27 c = (l1.val l2.val c)/10;28 //看最终是否还有一位进位29 if(c == 1){30 curr.next = new ListNode(c);31 curr.next.next = null;32 }else{33 curr.next = null;34 }35 return ans;36 }37 //一长一短时,留下长的那个,把短的的最后一个val记录后用不着了38 ListNode l;39 if(l1.next != null && l2.next == null){40 l = l1;41 curr.val = l2.val;42 }else{43 l = l2;44 curr.val = l1.val;45 }46 //处理短的的最后一位47 curr.val = l.val c;48 c = curr.val / 10;49 curr.val %= 10;50 curr.next = new ListNode(0);51 curr = curr.next;52 l = l.next;53 54 while(l.next != null){55 curr.val = (l.val c);56 c = (l.val c)/10;57 curr.next = new ListNode(0);58 curr = curr.next;59 l = l.next;60 }61 62 //处理长的的最后一位63 curr.val = (l.val c);64 c = (l.val c)/10;65 if(c == 1){66 curr.next = new ListNode(c);67 curr.next.next = null;68 }else{69 curr.next = null;70 }71 72 return ans;73 }74 }
按部就班的考虑与处理.注意不要有考察漏掉的情况
时间复杂度O(n),空间复杂度O(n)
//我所有的时空复杂度都是指级别,有必要具体分析的会特别注明
结果:
官方题解方法:
https://leetcode-cn.com/problems/add-two-numbers/solution/liang-shu-xiang-jia-by-leetcode/
也是朴素方法,区别在于他没有拆开来考虑,而是用了或判断,在末尾前进的时候又加了if
代码量比我的少,优雅一些.
(见仁见智,我不喜欢在简单的循环里加判断,徒增复杂度)
来源:https://www.icode9.com/content-4-341001.html联系客服