Skip to content

Commit 1b56f48

Browse files
authored
[String] Refactor solution to Multiply Strings
1 parent af8723b commit 1b56f48

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

String/MultiplyStrings.swift

+30-20
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,42 @@
1212

1313
class MultiplyStrings {
1414
func multiply(_ num1: String, _ num2: String) -> String {
15-
guard num1 != "0" && num2 != "0" else {
16-
return "0"
17-
}
18-
19-
let num1Chars = Array(num1.characters.reversed())
20-
let num2Chars = Array(num2.characters.reversed())
21-
var res = Array(repeating: 0, count: num1Chars.count + num2Chars.count)
22-
var finalChars = [String](), carry = 0, sum = 0
15+
let num1 = num1.reversed(), num2 = num2.reversed()
16+
var res = Array(repeating: 0, count: num1.count + num2.count), resStr = ""
2317

24-
for (i, char1) in num1Chars.enumerated() {
25-
let n1 = Int(String(char1))
26-
for (j, char2) in num2Chars.enumerated() {
27-
res[i + j] += n1! * Int(String(char2))!
18+
// calculate product for every digit
19+
for (i, char1) in num1.enumerated() {
20+
21+
guard let digit1 = Int(String(char1)) else {
22+
fatalError("Invalid Input num1")
23+
}
24+
25+
for (j, char2) in num2.enumerated() {
26+
guard let digit2 = Int(String(char2)) else {
27+
fatalError("Invalid Input num2")
28+
}
29+
30+
res[i + j] += digit1 * digit2
2831
}
2932
}
3033

31-
for num in res {
32-
sum = (carry + num) % 10
33-
carry = (carry + num) / 10
34-
finalChars.insert(String(sum), at: 0)
34+
// update digits
35+
for i in 0..<res.count {
36+
let num = res[i]
37+
38+
res[i] = num % 10
39+
if i < res.count - 1 {
40+
res[i + 1] += num / 10
41+
}
42+
43+
resStr = "\(res[i])" + resStr
3544
}
3645

37-
while !finalChars.isEmpty && finalChars.first! == "0" {
38-
finalChars.removeFirst()
46+
// trim starting 0s
47+
while !resStr.isEmpty && resStr.first! == "0" {
48+
resStr.removeFirst()
3949
}
4050

41-
return finalChars.reduce("") { $0 + $1 }
51+
return resStr.isEmpty ? "0" : resStr
4252
}
43-
}
53+
}

0 commit comments

Comments
 (0)