LeetCode-Add Two Numbers
2017-08-17 16:22
337 查看
Q :
S1: Time:O(max(m,n)) Space:O(max(m,n))
S2: Time:O(max(m,n)) Space:O(max(m,n))
简洁一些,判断少,速度快
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 contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
S1: Time:O(max(m,n)) Space:O(max(m,n))
/** * 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 * } * } */ class Solution { func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { var currentListNode1:ListNode? = l1 var currentListNode2:ListNode? = l2 let resultList = ListNode(0) var tempLast = resultList var carry = false var carryNum = 0 while currentListNode1 != nil { var sum = 0; if currentListNode2 != nil { sum = (currentListNode1?.val)! + (currentListNode2?.val)! if let next = currentListNode2?.next { currentListNode2 = next } else { currentListNode2 = nil } } else { sum = (currentListNode1?.val)! } if carry { sum = sum + carryNum carry = false carryNum = 0 } if sum >= 10 { let tempCarryNum = Int(sum / 10) if tempCarryNum != 0 { carry = true carryNum = tempCarryNum } } let nodeVal = Int(sum % 10) tempLast.next = ListNode(nodeVal) tempLast = tempLast.next! if let next = currentListNode1?.next { currentListNode1 = next } else { currentListNode1 = nil } } while currentListNode2 != nil { var sum = currentListNode2?.val if carry { sum = sum! + carryNum carry = false carryNum = 0 } if sum! >= 10 { let tempCarryNum = Int(sum! / 10) if tempCarryNum != 0 { carry = true carryNum = tempCarryNum } } let nodeVal = Int(sum! % 10) tempLast.next = ListNode(nodeVal) tempLast = tempLast.next! if let next = currentListNode2?.next { currentListNode2 = next; } else { currentListNode2 = nil } } if carry { tempLast.next = ListNode(carryNum) } return resultList.next } }
S2: Time:O(max(m,n)) Space:O(max(m,n))
简洁一些,判断少,速度快
/** * 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 * } * } */ class Solution { func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { var currentListNode1:ListNode? = l1 var currentListNode2:ListNode? = l2 let resultList = ListNode(0) var tempLast = resultList var carry = 0 while currentListNode1 != nil || currentListNode2 != nil { var val1 = 0; if let val = currentListNode1?.val { val1 = val } var val2 = 0; if let val = currentListNode2?.val { val2 = val } let sum = val1 + val2 + carry tempLast.next = ListNode(sum%10) tempLast = tempLast.next! carry = sum/10 if let next = currentListNode1?.next { currentListNode1 = next } else { currentListNode1 = nil } if let next = currentListNode2?.next { currentListNode2 = next } else { currentListNode2 = nil } } if carry > 0 { tempLast.next = ListNode(carry) } return resultList.next } }
相关文章推荐
- [LeetCode]Add Two Numbers
- LeetCode(2)--Add Two Numbers
- 【LeetCode】Add Two Numbers
- LeetCode--2. Add Two Numbers
- LeetCode 2 - Add Two Numbers
- [leetcode刷题系列]Add Two Numbers
- [Leetcode] 2. Add Two Numbers 解题报告
- leetcode(2)Add Two Numbers
- 【leetcode】2. Add Two Numbers
- Leetcode: 2. Add Two Numbers
- LeetCode:Add Two Numbers
- LeetCode 2:Add Two Numbers
- [LeetCode] Add Two Numbers 两数相加
- leetcode2 add two numbers
- 【LeetCode】【Python】【C++】2. Add Two Numbers代码实现
- Leetcode#2||Add Two Numbers
- [LeetCode]2. Add Two Numbers用链表逆序存储的两个数相加
- LeetCode 2. Add Two Numbers
- leetcode-2 Add Two Numbers
- 【LeetCode】Add Two Numbers