LeetCode No43. 字符串相乘
题目
定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
提示:
1 <= num1.length, num2.length <= 200
num1 和 num2 只能由数字组成。
num1 和 num2 都不包含任何前导零,除了数字0本身。
思路
手写大数乘法,注意前导0。
AC代码
点击查看代码
class Solution {
public String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
char[] char1 = num1.toCharArray();
char[] char2 = num2.toCharArray();
int len = char1.length + char2.length;
int[] result = new int[len];
for (int i = 0; i < char1.length; i++){
for (int j = 0; j < char2.length; j++){
result[i + j + 1] += (int)(char1[i]-'0') * (int)(char2[j]-'0');
}
}
for(int k = result.length-1; k > 0; k--){
result[k - 1] += result[k] / 10;
result[k] %= 10;
}
int index = result[0] == 0 ? 1 : 0;
StringBuffer ans = new StringBuffer();
while (index < len) {
ans.append(result[index]);
index++;
}
return ans.toString();
}
}
低调做人,高调做事。