50题 第16天 字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
说明:
num1和 num2 的长度小于110。 num1和 num2 只包含数字 0-9。 num1和 num2 均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
- 我的代码如下:
class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")) return "0";int m = num1.length();int n = num2.length();int[] mul = new int[m+n-1]; // 元素默认值为 0for(int i = 0; i < m; ++i) { // 竖式运算for(int j = 0; j < n; ++j) {int vi = num1.charAt(i) - 48;int vj = num2.charAt(j) - 48;mul[i+j] += vi*vj;}}for(int i = m+n-2; i > 0; --i) { // 进位mul[i-1] += mul[i]/10;mul[i] %= 10;}StringBuilder result = new StringBuilder();for(int i = 0; i < m+n-1; ++i) { // 结果拼接为字符串result.append(mul[i]);}return result.toString();}
}
运行结果
- 没能做出来,学习了别人的做法,就是重构了一个数组,然后用乘法竖式的思想进行填充,最后考虑进位。emm,我感觉不是我能独立完成的问题。感觉上周二的题也不是很顺,难道周二对我来说比较困难吗?