0%

LeetCode 2. Add Two Numbers

題目連結:Add Two Numbers - LeetCode

想法

我的作法可能沒有那麼好,我是用 vector 存數字,接著進行運算,最後再轉成 link-list。

code

1
2
3
4
5
6
7
8
9
10
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
vector<int> n1,n2;
n1.emplace_back(l1->val);
while(l1->next!=nullptr){
l1=l1->next;
n1.emplace_back(l1->val);
}

n2.emplace_back(l2->val);
while(l2->next!=nullptr){
l2=l2->next;
n2.emplace_back(l2->val);
}

vector<int> ans(max(n1.size(),n2.size())+1);
for(int i=0;i<n1.size();++i){
ans[i]+=n1[i];
}

for(int i=0;i<n2.size();++i){
ans[i]+=n2[i];
}

for(int i=0;i<max(n1.size(),n2.size());++i){
if(ans[i]>=10){
ans[i+1]++;
ans[i]-=10;
}
}

if(ans.back()==0){
ans.pop_back();
}

ListNode *ret=new ListNode(ans[0]),*a=ret,*b=nullptr;
for(int i=1;i<ans.size();++i){
b=new ListNode(ans[i]);
a->next=b;
a=b;
}

return ret;
}
};