package LeetCode_43 /** * 43. Multiply Strings * https://leetcode.com/problems/multiply-strings/ * Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, * also represented as a string. Note: You must not use any built-in BigInteger library or convert the inputs to integer directly. Example 1: Input: num1 = "2", num2 = "3" Output: "6" Example 2: Input: num1 = "123", num2 = "456" Output: "56088" Constraints: 1. 1 <= num1.length, num2.length <= 200 2. num1 and num2 consist of digits only. 3. Both num1 and num2 do not contain any leading zero, except the number 0 itself. * */ class Solution { /* * solution: new array to save the multiplication result of each number, for example: 123*45: * 123, index i * 45, index j * ------ * 15 index: i+j, i+j+1 * 10 * 05 * 12 * 08 * 04 * ------ * 01234 new_index * * Time:O(m*m), Space:O(m+n) * */ fun multiply(num1: String, num2: String): String { val m = num1.length val n = num2.length val array = IntArray(m + n) for (i in m - 1 downTo 0) { for (j in n - 1 downTo 0) { val cur = (num1[i] - '0') * (num2[j] - '0') array[i + j + 1] += cur if (array[i + j + 1] >= 10) { //sum up carry and save in left of (i + j + 1) array[i + j] += (array[i + j + 1]) / 10 //update current digit array[i + j + 1] = (array[i + j + 1]) % 10 } } } val result = StringBuilder() for (num in array) { if (!(result.isEmpty() && num == 0)) { result.append(num) } } return if (result.isEmpty()) "0" else result.toString() } }