Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情
题目
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
数据范围: 读入的数字大小满足0≤n≤10^1000
要求:空间复杂度 O(n),时间复杂度 O(n^2)
示例1
输入:
"11","99"
返回值:
"1089"
说明:
11*99=1089
示例2
输入:
"1","0"
返回值:
"0"
题解
这道题目必然不能用暴力方法,肯定会超时,所以我们使用最原始的一种方法。模拟,模拟这个过程。不断地进位,当res刚开始有0的话,就将0去掉,最终输出res的字符串类型。
AC Code
func solve( s string , t string ) string {
if s=="0"||t=="0"{
return "0"
}
(1) res := make([]int,len(s)+len(t))
for i:=len(s)-1;i>=0;i--{
for j:=len(t)-1;j>=0;j--{
(2) sum := int(s[i]-'0')*int(t[j]-'0')+res[i+j+1]
(3) res[i+j+1] = sum%10
(4) res[i+j] += sum/10
}
}
(5) result := []byte{}
(6) for i:=0; i<len(res); i++ {
if i==0 && res[i]==0 {
(7) continue
}
(8) result = append(result,byte(res[i]+'0'))
}
(9) return string(result)
}
- (1) 开辟一个两个字符串长度加起来的res长度
- (2) 每个数取出来,进行相乘,并且加上前一个值(这个值上一个相加的进位数)
- (3) 取余,保存一位
- (4) 进位,对这一列的数进行相加
- (5) 定义一个byte切片
- (6) 遍历这个res结果,要转化成字符串
- (7) 从指定位置开始,并具有指定的长度
- (8) 对这个数组进行追加
- (9) 返回string类型