0043.字符串相乘

方法一:模拟加法

时间复杂度 O((m+n)×n)=O(mn+n2)O((m+n) \times n) = O(mn+n^2),空间复杂度 O(m+n)O(m+n),其中 mn 分别表示 num1num2的长度。

func multiply(num1, num2 string) string { if num1 == "0" || num2 == "0" { return "0" } ans := "" for i := 0; i < len(num2); i++ { tmp, a, mod := "", int(num2[i]-'0'), 0 for j := len(num1) - 1; j >= 0; j-- { b := int(num1[j] - '0') tmp = fmt.Sprintf("%d", (a*b+mod)%10) + tmp mod = (a*b + mod) / 10 } if mod != 0 { tmp = fmt.Sprintf("%d", mod) + tmp } ans = add(ans+"0", tmp) } return ans } func add(num1, num2 string) string { ans, mod := "", 0 for len(num1) > 0 || len(num2) > 0 || mod > 0 { a, b := 0, 0 if len(num1) > 0 { a, num1 = int(num1[len(num1)-1]-'0'), num1[:len(num1)-1] } if len(num2) > 0 { b, num2 = int(num2[len(num2)-1]-'0'), num2[:len(num2)-1] } ans = fmt.Sprintf("%d", (a+b+mod)%10) + ans mod = (a + b + mod) / 10 } return ans }