Skip to content

Commit

Permalink
添加两数相加解法
Browse files Browse the repository at this point in the history
  • Loading branch information
hongqima committed May 25, 2019
1 parent e459b8a commit bd00c47
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 1 deletion.
59 changes: 59 additions & 0 deletions 0002-两数相加/Swift/addTwoNumbers.swift
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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) | 中等 | | | | | |
Expand Down

0 comments on commit bd00c47

Please sign in to comment.