📑 题目:43. 字符串相乘

🚀 本题 LeetCode 传送门

题目大意

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

解题思路

  • 用数组模拟乘法。创建一个数组长度为 len(num1) + len(num2) 的数组用于存储乘积。对于任意 0 ≤ i < len(num1)0 ≤ j < len(num2)num1[i] * num2[j] 的结果位于 tmp[i+j+1],如果 tmp[i+j+1]≥10,则将进位部分加到 tmp[i+j]。最后,将数组 tmp 转成字符串,如果最高位是 0 则舍弃最高位。

代码

  1. package leetcode
  2. func multiply(num1 string, num2 string) string {
  3. if num1 == "0" || num2 == "0" {
  4. return "0"
  5. }
  6. b1, b2, tmp := []byte(num1), []byte(num2), make([]int, len(num1)+len(num2))
  7. for i := 0; i < len(b1); i++ {
  8. for j := 0; j < len(b2); j++ {
  9. tmp[i+j+1] += int(b1[i]-'0') * int(b2[j]-'0')
  10. }
  11. }
  12. for i := len(tmp) - 1; i > 0; i-- {
  13. tmp[i-1] += tmp[i] / 10
  14. tmp[i] = tmp[i] % 10
  15. }
  16. if tmp[0] == 0 {
  17. tmp = tmp[1:]
  18. }
  19. res := make([]byte, len(tmp))
  20. for i := 0; i < len(tmp); i++ {
  21. res[i] = '0' + byte(tmp[i])
  22. }
  23. return string(res)
  24. }