diff --git "a/0002-\344\270\244\346\225\260\347\233\270\345\212\240/Swift/addTwoNumbers.swift" "b/0002-\344\270\244\346\225\260\347\233\270\345\212\240/Swift/addTwoNumbers.swift" new file mode 100644 index 0000000..bcb0586 --- /dev/null +++ "b/0002-\344\270\244\346\225\260\347\233\270\345\212\240/Swift/addTwoNumbers.swift" @@ -0,0 +1,59 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * public var val: Int + * public var next: ListNode? + * public init(_ val: Int) { + * self.val = val + * self.next = nil + * } + * } + */ + +/** + 执行用时 : 72 ms, 在Add Two Numbers的Swift提交中击败了93.53% 的用户 + 内存消耗 : 21.5 MB, 在Add Two Numbers的Swift提交中击败了5.14% 的用户 + + 1. 使用flag标识当前是否需要进位 + 2. 共同遍历两个链表,取两个结点和flag的和,并重设flag + 3. 处理比较长的链表 + 4. 最终处理flag + */ +func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { + var flag = 0 + var p = l1 + var q = l2 + var dummy = ListNode(-1) + var rear = dummy + while p != nil && q != nil { + let val = p!.val + q!.val + flag + let newNode = ListNode(val % 10) + flag = val / 10 + rear.next = newNode + rear = newNode + p = p!.next + q = q!.next + } + while p != nil { + print(p!.val) + let val = p!.val + flag + let newNode = ListNode(val % 10) + flag = val / 10 + rear.next = newNode + rear = newNode + p = p!.next + } + + while q != nil { + let val = q!.val + flag + let newNode = ListNode(val % 10) + flag = val / 10 + rear.next = newNode + rear = newNode + q = q!.next + } + if flag != 0 { + rear.next = ListNode(1) + } + return dummy.next +} diff --git a/README.md b/README.md index d384440..30d845b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ | 题号 | 题目 | 难度 | Swift | Python | Java | C/C++ | OC | | --- | ---- | --- | ----- | ------ | ---- | ----- | -- | | 1 | [两数之和](https://leetcode-cn.com/problems/two-sum) | 简单 | [Swift](0001-两数之和/Swift) | | | | | -| 2 | [两数相加](https://leetcode-cn.com/problems/add-two-numbers) | 中等 | | | | | | +| 2 | [两数相加](https://leetcode-cn.com/problems/add-two-numbers) | 中等 | [Swift](0002-两数相加/Swift) | | | | | | 3 | [无重复字符的最长子串](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters) | 中等 | | | | | | | 4 | [寻找两个有序数组的中位数](https://leetcode-cn.com/problems/median-of-two-sorted-arrays) | 困难 | | | | | | | 5 | [最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-substring) | 中等 | | | | | |