go + 数组
以 123 * 456 为例
输入: num1 = "123", num2 = "456" 输出: "56088"
参考 leetcode
https://leetcode-cn.com/problems/multiply-strings/solution/zi-fu-chuan-xiang-cheng-by-leetcode-solution/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
func solve( s string , t string ) string {
// write code here
if s == "0" || t == "0" {
return "0"
}
// 两数相乘,最大长度为 m+n
m, n := len(s), len(t)
arr := make([]int, m+n)
for i:=m-1; i>=0; i--{
n1 := int(s[i]-'0')
for j:=n-1; j>=0; j--{
n2 := int(t[j]-'0')
// m的第i位乘以n的第j位,位于最终数组的j+j+1的位置
// 理解这里很重要。i+j+1 可能是一个大于10的数字
// 因为这里存储的是乘积,没向前进位
arr[i+j+1] += n1*n2
}
}
// 处理进位,i的进位位置在i-1位置
for i:= len(arr)-1; i>0; i--{
arr[i-1] += arr[i]/10
arr[i] = arr[i]%10
}
// 如果第0位为0,则需要处理
inx := 0
if arr[0] == 0 {
inx =1
}
res := ""
for i:= inx; i<len(arr); i++{
res += strconv.Itoa(arr[i])
}
return res
}
京公网安备 11010502036488号