Algorithm
[LeetCode/Swift] 2. Add Two Numbers
개발자 수니
2024. 1. 16. 16:51
728x90
반응형
💡 문제 (Medium)
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 contains a single digit. Add the two numbers and return the sum as a linked list.
두 개의 양의 정수를 나타내는 비어 있지 않은 두 링크드 리스트가 제공됩니다. 각 숫자는 역순으로 저장되어 있으며, 각 노드는 한 자리 숫자를 포함합니다. 두 숫자를 더하고 합계를 링크드 리스트로 반환하세요.
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 2:
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.
👩🏻💻 해결
/**
* Definition for singly-linked list.
* public class ListNode {
* public var val: Int
* public var next: ListNode?
* public init() { self.val = 0; self.next = nil; }
* public init(_ val: Int) { self.val = val; self.next = nil; }
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
* }
*/
1차 class 변수로 carry(올림값)을 선언하여 재귀 함수로 풀이
class Solution {
var carry: Int = 0
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
if l1 == nil, l2 == nil, carry == 0 { return nil }
let sum = (l1?.val ?? 0) + (l2?.val ?? 0) + carry
carry = sum / 10
return .init(sum % 10, addTwoNumbers(l1?.next, l2?.next))
}
}
2차 반복문을 사용하여 풀이
class Solution {
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
var l1 = l1
var l2 = l2
var prev: ListNode?
var carry = 0
var result: ListNode?
while l1 != nil || l2 != nil || carry != 0 {
let sum = (l2 == nil ? 0 : l2!.val) + (l1 == nil ? 0 : l1!.val) + carry
carry = sum / 10
let new = ListNode(sum % 10)
prev?.next = new
prev = new
if result == nil {
result = new
}
l1 = l1 == nil ? l1: l1?.next
l2 = l2 == nil ? l2: l2?.next
}
return result
}
}
728x90
반응형