43. 字符串相乘
分析
-
倒序存储数字
- 将
num1
和num2
中的每一位字符转为整数,并倒序存入数组A
和B
。这样可以方便从低位开始模拟乘法
- 将
-
模拟乘法逐位累加
- 两个长度分别为
n
和m
的数字相乘,结果最多有n + m
位 - 使用两个倒序数组
A
和B
,逐位计算乘积,并将结果累加到结果数组C
中:- 对于
A[i] * B[j]
,结果累加到C[i + j]
- 对于
- 两个长度分别为
-
处理进位
- 遍历结果数组
C
,将每位上的数处理为个位,进位部分加到下一位
- 遍历结果数组
-
移除前导零并生成结果字符串
- 从结果数组的高位向低位查找第一个非零位,忽略高位多余的零
- 将结果数组转为字符串输出
时间复杂度
- 两个数字的长度分别为
n
和m
- 遍历两者进行乘法计算,需要
O(n * m)
- 进位处理和结果拼接的时间为
O(n + m)
总体时间复杂度为 O(n * m)
空间复杂度
- 结果数组
C
的长度为n + m
空间复杂度为 O(n + m)
C++代码
|
|