Skip to content

Commit cc99530

Browse files
committed
0445 solved.
1 parent ba56fce commit cc99530

File tree

5 files changed

+201
-0
lines changed

5 files changed

+201
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cmake_minimum_required(VERSION 3.14)
2+
project(cpp_0445)
3+
4+
set(CMAKE_CXX_STANDARD 14)
5+
6+
add_executable(cpp_0445 main3.cpp)
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/// Source : https://leetcode.com/problems/add-two-numbers-ii/
2+
/// Author : liuyubobobo
3+
/// Time : 2019-09-21
4+
5+
#include <iostream>
6+
7+
using namespace std;
8+
9+
10+
/// Using reverse
11+
/// Time Complexity: O(m + n + max(m, n))
12+
/// Space Complexity: O(1)
13+
14+
/// Definition for singly-linked list.
15+
struct ListNode {
16+
int val;
17+
ListNode *next;
18+
ListNode(int x) : val(x), next(NULL) {}
19+
};
20+
21+
class Solution {
22+
public:
23+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
24+
25+
l1 = reverse(l1);
26+
l2 = reverse(l2);
27+
ListNode* dummyHead = new ListNode(-1), *cur = dummyHead;
28+
int carry = 0;
29+
for(ListNode* node1 = l1, *node2 = l2; node1 || node2 || carry;
30+
node1 = node1 ? node1->next : NULL, node2 = node2 ? node2->next : NULL){
31+
32+
int x = node1 ? node1->val : 0;
33+
x += node2 ? node2->val : 0;
34+
x += carry;
35+
cur->next = new ListNode(x % 10);
36+
cur = cur->next;
37+
carry = x / 10;
38+
}
39+
return reverse(dummyHead->next);
40+
}
41+
42+
private:
43+
ListNode* reverse(ListNode* node){
44+
45+
if(!node->next) return node;
46+
47+
ListNode* ret = reverse(node->next);
48+
node->next->next = node;
49+
node->next = NULL;
50+
return ret;
51+
}
52+
};
53+
54+
55+
int main() {
56+
57+
return 0;
58+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/// Source : https://leetcode.com/problems/add-two-numbers-ii/
2+
/// Author : liuyubobobo
3+
/// Time : 2019-09-21
4+
5+
#include <iostream>
6+
#include <stack>
7+
8+
using namespace std;
9+
10+
11+
/// Using Stack
12+
/// Time Complexity: O(m + n + max(m, n))
13+
/// Space Complexity: O(m + n)
14+
15+
/// Definition for singly-linked list.
16+
struct ListNode {
17+
int val;
18+
ListNode *next;
19+
ListNode(int x) : val(x), next(NULL) {}
20+
};
21+
22+
class Solution {
23+
public:
24+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
25+
26+
stack<ListNode*> stack1, stack2, stack;
27+
ListNode* node = l1;
28+
while(node) stack1.push(node), node = node->next;
29+
node = l2;
30+
while(node) stack2.push(node), node = node->next;
31+
32+
int carry = 0;
33+
while(!stack1.empty() || !stack2.empty() || carry){
34+
35+
int x = 0;
36+
if(!stack1.empty()) x += stack1.top()->val, stack1.pop();
37+
if(!stack2.empty()) x += stack2.top()->val, stack2.pop();
38+
x += carry;
39+
40+
stack.push(new ListNode(x % 10));
41+
carry = x / 10;
42+
}
43+
44+
ListNode* ret = stack.top(), *cur = ret;
45+
stack.pop();
46+
while(!stack.empty())
47+
cur->next = stack.top(), cur = cur->next, stack.pop();
48+
return ret;
49+
}
50+
};
51+
52+
53+
int main() {
54+
55+
return 0;
56+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/// Source : https://leetcode.com/problems/add-two-numbers-ii/
2+
/// Author : liuyubobobo
3+
/// Time : 2019-09-21
4+
5+
#include <iostream>
6+
#include <stack>
7+
8+
using namespace std;
9+
10+
11+
/// Recursion
12+
/// Time Complexity: O(m + n + max(m, n))
13+
/// Space Complexity: O(max(m, n))
14+
15+
/// Definition for singly-linked list.
16+
struct ListNode {
17+
int val;
18+
ListNode *next;
19+
ListNode(int x) : val(x), next(NULL) {}
20+
};
21+
22+
class Solution {
23+
public:
24+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
25+
26+
int len1 = get_length(l1), len2 = get_length(l2);
27+
int len = max(len1, len2);
28+
29+
if(len1 != len2){
30+
ListNode* head = len1 < len2 ? l1 : l2;
31+
for(int i = 0; i < len - min(len1, len2); i ++){
32+
ListNode* node = new ListNode(0);
33+
node->next = head;
34+
head = node;
35+
}
36+
if(len1 < len2) l1 = head;
37+
else l2 = head;
38+
}
39+
40+
int carry = 0;
41+
ListNode* res = go(l1, l2, carry);
42+
if(carry){
43+
ListNode* node = new ListNode(1);
44+
node->next = res;
45+
res = node;
46+
}
47+
return res;
48+
}
49+
50+
private:
51+
int get_length(ListNode* head){
52+
53+
if(!head) return 0;
54+
return 1 + get_length(head->next);
55+
}
56+
57+
ListNode* go(ListNode* l1, ListNode* l2, int& carry){
58+
59+
if(!l1){
60+
assert(!l2);
61+
carry = 0;
62+
return NULL;
63+
}
64+
65+
int c = 0;
66+
ListNode* next = go(l1->next, l2->next, c);
67+
int x = l1->val + l2->val + c;
68+
ListNode* res = new ListNode(x % 10);
69+
res->next = next;
70+
carry = x / 10;
71+
return res;
72+
}
73+
};
74+
75+
76+
int main() {
77+
78+
return 0;
79+
}

readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,8 @@ email: [liuyubobobo@gmail.com](mailto:liuyubobobo@gmail.com)
368368
| | | | | | |
369369
| 443 | [String Compression](https://leetcode.com/problems/string-compression/description/) | | [C++](0443-String-Compression/cpp-0443/) | | |
370370
| | | | | | |
371+
| 445 | [Add Two Numbers II](https://leetcode.com/problems/add-two-numbers-ii/) | [] | [C++](0445-Add-Two-Numbers-II/cpp-0445/) | | |
372+
| | | | | | |
371373
| 447 | [Number of Boomerangs](https://leetcode.com/problems/number-of-boomerangs/description/) | [] | [C++](0447-Number-of-Boomerangs/cpp-0447/) | [Java](0447-Number-of-Boomerangs/java-0447/src/) | |
372374
| | | | | | |
373375
| 450 | [Delete Node in a BST](https://leetcode.com/problems/delete-node-in-a-bst/) | [solution](https://leetcode.com/problems/delete-node-in-a-bst/solution/) | [C++](0450-Delete-Node-in-a-BST/cpp-0450/) | | |

0 commit comments

Comments
 (0)