diff --git a/problems/add-binary/add_binary.go b/problems/add-binary/add_binary.go index 1e5af18b8..283302d79 100644 --- a/problems/add-binary/add_binary.go +++ b/problems/add-binary/add_binary.go @@ -1,22 +1,20 @@ -package add_binary +package problem_67 func addBinary(a string, b string) string { - i, j := len(a)-1, len(b)-1 - var carry byte = '0' - var bs []byte - for i >= 0 || j >= 0 || carry != '0' { + ans, l1, l2, carry := "", len(a)-1, len(b)-1, byte('0') + for l1 >= 0 || l2 >= 0 || carry != '0' { v := carry - if i >= 0 { - v += a[i] - '0' - i-- + if l1 >= 0 { + v += a[l1] - '0' + l1-- } - if j >= 0 { - v += b[j] - '0' - j-- + if l2 >= 0 { + v += b[l2] - '0' + l2-- } carry = '0' + (v-'0')/2 v = '0' + (v-'0')%2 - bs = append([]byte{v}, bs...) + ans = string(v) + ans } - return string(bs) + return ans } diff --git a/problems/add-binary/add_binary_test.go b/problems/add-binary/add_binary_test.go index 11adb7846..071a57d26 100644 --- a/problems/add-binary/add_binary_test.go +++ b/problems/add-binary/add_binary_test.go @@ -1,4 +1,4 @@ -package add_binary +package problem_67 import "testing" diff --git a/problems/add-strings/add_strings.go b/problems/add-strings/add_strings.go index 318fa6e85..a50f25582 100644 --- a/problems/add-strings/add_strings.go +++ b/problems/add-strings/add_strings.go @@ -1 +1,20 @@ -package add_strings +package problem_415 + +func addStrings(num1 string, num2 string) string { + ans, l1, l2, carry := "", len(num1)-1, len(num2)-1, byte('0') + for l1 >= 0 || l2 >= 0 || carry != '0' { + v := carry + if l1 >= 0 { + v += num1[l1] - '0' + l1-- + } + if l2 >= 0 { + v += num2[l2] - '0' + l2-- + } + carry = '0' + (v-'0')/10 + v = '0' + (v-'0')%10 + ans = string(v) + ans + } + return ans +} diff --git a/problems/add-strings/add_strings_test.go b/problems/add-strings/add_strings_test.go index 318fa6e85..986cb15c1 100644 --- a/problems/add-strings/add_strings_test.go +++ b/problems/add-strings/add_strings_test.go @@ -1 +1,40 @@ -package add_strings +package problem_415 + +import "testing" + +type caseType struct { + num1 string + num2 string + expected string +} + +func TestAddStrings(t *testing.T) { + tests := [...]caseType{ + { + num1: "0", + num2: "0", + expected: "0", + }, + { + num1: "1", + num2: "2", + expected: "3", + }, + { + num1: "9", + num2: "9", + expected: "18", + }, + { + num1: "100", + num2: "999", + expected: "1099", + }, + } + for _, tc := range tests { + output := addStrings(tc.num1, tc.num2) + if output != tc.expected { + t.Fatalf("input: %v, output: %v, expected: %v", tc, output, tc.expected) + } + } +}