week2-leetcode #2-Add two Numbers[Medium]
来源:互联网 发布:苹果aso优化 编辑:程序博客网 时间:2024/05/17 08:08
leetcode #2-Add two Numbers[Medium]
Question
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.
Example
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8
Solution1[base]
time complecity:
space complecity:
runtime:53ms
class Solution {public: ListNode* addTwoNumbers(ListNode* l1_head, ListNode* l2_head) { ListNode* l1_seq = l1_head; ListNode* l2_seq = l2_head; ListNode* l3_head = new ListNode(0); ListNode* l3_seq = l3_head; int carry = 0; int sum = 0; bool flag = true; while (l1_seq->next != NULL && l2_seq->next != NULL) { int l1_number = l1_seq->val; int l2_number = l2_seq->val; int add = l1_number+l2_number+carry; sum = add%10; carry = add/10; // 第一次 if (flag == true) { l3_seq->val = sum; flag = false; } else { l3_seq->next = new ListNode(sum); l3_seq = l3_seq->next; } l1_seq = l1_seq->next; l2_seq = l2_seq->next; } // 最后一次两个都可以相加 int l1_number = l1_seq->val; int l2_number = l2_seq->val; int last_add = l1_number+l2_number+carry; sum = last_add%10; carry = last_add/10; // 第一次 if (flag == true) { l3_seq->val = sum; flag = false; } else { l3_seq->next = new ListNode(sum); l3_seq = l3_seq->next; } if (l1_seq->next == NULL && l2_seq->next == NULL && carry != 0) { l3_seq->next = new ListNode(carry); } l1_seq = l1_seq->next; l2_seq = l2_seq->next; while (l1_seq != NULL) { last_add = l1_seq->val+carry; sum = last_add%10; carry = last_add/10; l3_seq->next = new ListNode(sum); l3_seq = l3_seq->next; l1_seq = l1_seq->next; if (l1_seq == NULL && carry != 0) { l3_seq->next = new ListNode(carry); } } while (l2_seq != NULL) { last_add = l2_seq->val+carry; sum = last_add%10; carry = last_add/10; l3_seq->next = new ListNode(sum); l3_seq = l3_seq->next; l2_seq = l2_seq->next; if (l2_seq == NULL && carry != 0) { l3_seq->next = new ListNode(carry); } } return l3_head; }};
思路:实现考虑了很多种情况:
l1有多个,l2有多个,不产生进位
l1有多个,l2有多个,产生进位
l1有一个,l2有多个,不产生进位
l1有一个,l2有多个,产生进位
….
所以代码很长,逻辑不清楚
Solution2[optimal]
time complecity:
space complecity:
runtime:51ms
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode preHead(0), *p = &preHead; int extra = 0; while (l1 || l2 || extra) { int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->next = new ListNode(sum % 10); p = p->next; l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return preHead.next; }};
思路:将问题简化,考虑l1,l2和进位决定是否增加一个ListNode,虽然复杂度差不多,但是代码量大大减少。逻辑清晰
阅读全文
0 0
- week2-leetcode #2-Add two Numbers[Medium]
- LeetCode#2 Add Two Numbers (week2)
- <LeetCode><Medium>2 Add Two Numbers
- Leetcode #2 Add Two Numbers(medium)
- Leetcode OJ 2 Add Two Numbers [Medium]
- LeetCode-2-Add Two Numbers(链表)-Medium
- [LeetCode][2 Add Two Numbers][medium]Java实现
- Leetcode 2. Add Two Numbers (Medium) (cpp)
- 【leetcode】2. Add Two Numbers 【medium】
- Add Two Numbers (Leetcode medium algorithm problem)
- LeetCode 2. Add Two Numbers[Medium]
- 【leetcode medium】2. Add Two Numbers
- Add Two Numbers [Medium]
- Add Two Numbers(medium)
- [Medium]Add Two Numbers
- Leet Code Medium 2 add two numbers
- [2, Medium, C++] Add Two Numbers
- Medium 2题 Add Two Numbers
- PHP实现简单留言板(Smarty版)
- mysql几种引擎比较
- Add Two Numbers--LeetCode
- Redis连接池工具类
- JS页面跳转和刷新的几种方式
- week2-leetcode #2-Add two Numbers[Medium]
- Java中的equals()和hashcode()之间关系
- 多尺度小波分解得到的系数进行处理后如何进行chogng
- 657. Judge Route Circle-Difficulty:Easy
- 从HelloWorld开始
- 感性的人
- sklearn预处理
- 接口有什么优点
- 2017-9-17考试总结