문제 설명
You are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Example 2:
Input: l1 = [0], l2 = [0]
Output: [0]
Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
Constraints:
- The number of nodes in each linked list is in the range[1, 100].
- 0 <= Node.val <= 9
- It is guaranteed that the list represents a number that does not have leading zeros.
풀이 과정
- 먼저 입력받은 두개의 Linked-List를 따라 이동하면서 더해야 하는 수 a,b를 구한다.
- idx를 10씩 곱해주면서 val * idx를 더해주면 된다.
- a, b를 구해주었다면, 합계를 구한 다음 문자열로 바꾸고 뒤집는다.
- 뒤집은 수 숫자 한자리씩 Linked-List를 구성하여 주면 된다.
- 한자리씩 노드를 만들어서, 맨 마지막 노드에 붙여주면 된다.
- 헤드 노드를 따로 만들어주어야 함 => 리턴할 때 사용
- Linked-List의 헤드 노드를 리턴해주면 된다.
소스 코드
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
a = 0
idx = 1
temp = l1
while temp:
a += temp.val * idx
idx *= 10
temp = temp.next
b = 0
idx = 1
temp = l2
while temp:
b += temp.val * idx
idx *= 10
temp = temp.next
print(a, b)
c = str(a + b)[::-1]
head = None
last = None
for i in c:
node = ListNode(val=int(i))
if head is None:
head = node
if last is not None:
last.next = node
last = node
else:
last = node
return head
'알고리즘[Python] > LeetCode' 카테고리의 다른 글
[ 구현 ] Longest Palindromic Substring (0) | 2021.12.25 |
---|---|
[4] [ queue ] Median of Two Sorted Arrays (0) | 2021.08.28 |
[ 23 ] [ heap ] Merge k Sorted Lists (0) | 2021.08.20 |
[ 98 ] [ Recursion ] Validate Binary Search Tree (0) | 2021.08.15 |
[ 3 ] [ Queue, set ] Longest Substring Without Repeating Characters (0) | 2021.08.15 |