From 2bc25726d2c1f3f9df8def5b15230dba5af08470 Mon Sep 17 00:00:00 2001 From: Brandon Scott Date: Tue, 27 Jun 2017 20:40:06 -0500 Subject: [PATCH] Wrote a shorter version of the two number adder. --- .../P002-Add-Two-Numbers/Program.cs | 7 +++++- .../P002-Add-Two-Numbers/Solution.cs | 24 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Program.cs b/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Program.cs index 49e5159..35cf164 100644 --- a/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Program.cs +++ b/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Program.cs @@ -23,7 +23,12 @@ namespace P002_Add_Two_Numbers input2.next = new ListNode(6); input2.next.next = new ListNode(4); - var answer = solution.AddTwoNumbers(input1, input2); + var answer = solution.AddTwoNumbersV1(input1, input2); + for (ListNode x1 = answer; x1 != null; x1 = x1?.next) + Console.Write(x1.val + " "); + Console.Write("\n"); + + answer = solution.AddTwoNumbersV2(input1, input2); for (ListNode x1 = answer; x1 != null; x1 = x1?.next) Console.Write(x1.val + " "); Console.Write("\n"); diff --git a/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Solution.cs b/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Solution.cs index 4afdbb0..42060cd 100644 --- a/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Solution.cs +++ b/P002-Add-Two-Numbers/P002-Add-Two-Numbers/Solution.cs @@ -13,7 +13,7 @@ namespace P002_Add_Two_Numbers * Status: Accepted * Runtime: 166 ms */ - public ListNode AddTwoNumbers(ListNode l1, ListNode l2) + public ListNode AddTwoNumbersV1(ListNode l1, ListNode l2) { StringBuilder result = new StringBuilder(); @@ -40,5 +40,27 @@ namespace P002_Add_Two_Numbers return head; } + /** + * 1562 / 1562 test cases passed. + * Status: Accepted + * Runtime: 189 ms + */ + public ListNode AddTwoNumbersV2(ListNode l1, ListNode l2) + { + ListNode previous = new ListNode(0); + ListNode head = previous; + int carry = 0, value = 0; + + for (ListNode x1 = l1, x2 = l2; x1 != null || x2 != null || carry != 0; x1 = x1?.next, x2 = x2?.next) + { + ListNode current = new ListNode(0); + value = (x1 != null ? x1.val : 0) + (x2 != null ? x2.val : 0) + carry; + carry = value / 10; + current.val = (value % 10); + previous = previous.next = current; + } + + return head.next; + } } }