Сложность: medium
При наличии двух неотрицательных целых чисел
num1 и num2, представленных в виде строк, вернуть произведение num1 и num2, также представленное в виде строки. Примечание: Нельзя использовать встроенные библиотеки
BigInteger или напрямую преобразовывать входные данные в integer. Пример:
Input: num1 = "123", num2 = "456"
Output: "56088"
👨💻 Алгоритм:
1⃣Преобразовать строки в массивы цифр в перевернутом порядке.
2⃣Использовать алгоритм умножения в столбик, накапливая суммы по индексам.
3⃣Преобразовать результат обратно в строку, удаляя ведущие нули.
😎 Решение:
class Solution {
func multiply(_ num1: String, _ num2: String) -> String {
guard num1 != "0", num2 != "0" else { return "0" }
let n1 = num1.map { Int(String($0))! }.reversed()
let n2 = num2.map { Int(String($0))! }.reversed()
var res = Array(repeating: 0, count: num1.count + num2.count)
for i in 0..<n1.count {
for j in 0..<n2.count {
res[i + j] += n1[i] * n2[j]
res[i + j + 1] += res[i + j] / 10
res[i + j] %= 10
}
}
while res.count > 1, res.last == 0 {
res.removeLast()
}
return res.reversed().map(String.init).joined()
}
}Ставь 👍 и забирай 📚 Базу знаний