배움 저장소
[LeetCode] 002 Add Two Numbers 본문
leetcode.com/problems/add-two-numbers/submissions/
처음에 int형에다가 값을 저장했다가 다시 ListNode를 만들어 반환했다. 그러면 INT_MAX를 넘어서는 값이 나와서 long long 타입으로 바꾸어주었는데 그래도 long long max 를 넘는 값이 나와서 ListNode로 바로 변환해주는 방식으로 바꾸었다. 이 때 buffer를 만들어주어서 두 수의 값이 10을 넘어서면 그 다음 ListNode를 만들 때 1을 더해주었다.
LeetCode에서 Submission 탭에 가보면 훨씬 더 간결하게 정리해놓은 코드가 있다.
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode();
ListNode* node_pointer = dummy;
int buffer = 0;
while(l1 && l2){
node_pointer->next = new ListNode();
int sum = l1->val + l2->val + buffer;
buffer = 0;
if(sum>9) buffer++;
node_pointer->next->val = sum%10;
l1 = l1->next;
l2 = l2->next;
node_pointer = node_pointer->next;
}
while(l2){
node_pointer->next = new ListNode();
int sum = l2->val + buffer;
buffer = 0;
if(sum>9) buffer++;
node_pointer->next->val = sum%10;
l2 = l2->next;
node_pointer = node_pointer->next;
}
while(l1){
node_pointer->next = new ListNode();
int sum = l1->val + buffer;
buffer = 0;
if(sum>9) buffer++;
node_pointer->next->val = sum%10;
l1 = l1->next;
node_pointer = node_pointer->next;
}
if(buffer>0){
node_pointer->next = new ListNode();
node_pointer->next->val = buffer;
}
return dummy->next;
}
or 구문을 사용하여 while-loop를 돌되 괄호( 와 ?를 사용하여 sum값을 구하여 while-loop를 하나만 사용할 수 있었다. 놀랍다.
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode();
ListNode* node_pointer = dummy;
int buffer = 0;
while(l1 || l2 || buffer){
int sum = (l1? l1->val:0) + (l2? l2->val:0) + buffer;
buffer = sum/10;
node_pointer->next = new ListNode(sum%10);
l1 = l1? l1->next : l1;
l2 = l2? l2->next : l2;
node_pointer = node_pointer->next;
}
return dummy->next;
}
'PS > LeetCode' 카테고리의 다른 글
[Leet Code]055 Jump Game (0) | 2021.10.06 |
---|---|
[Leet Code]009 Palindorme Number (0) | 2021.05.21 |
[Leet Code]007 Reverse Integer (0) | 2021.05.12 |
[Leet Code] 006 ZigZag Conversion (0) | 2021.05.10 |
[LeetCode] 001 Two Sum (0) | 2021.04.20 |
Comments