- 两数相乘,结果的长度不会大于两数长度和m + n,所以一开始我们开一个int[] res = new int[m + n]
- 接下来对num1和num2做一个双重循环从后向前遍历
- 当前的 digit1 = num1.charAt(i) - '0', digit2 = num2.charAt(j) - '0'
- 这时我们可以更新当前res[i + j + 1]的这个位置为原来存在这一位置上的值再加上新的值digits 1 * digit2,简略一下就是 res[i + j + 1] += digits 1 * digit2
- 接下来根据res[i + j + 1]的新值,我们可以更新高一位的res[i + j], res[i + j] += res[i + j + 1] / 10,就是本来的值加上进位
- 最后我们再用res[i + j + 1] %= 10求出这一位置进位后剩下的digit
- 求出res数组之后我们可以建立一个StringBuilder sb,来从头遍历数组,求出最终结果
- 要注意的是当sb.length() == 0并且res[i] = 0时,这时候是开头的0值,需要跳过
- 假如遍历完毕以后sb.length()依然等于0, 我们返回"0"
还是完全不会哈哈
76.72 %
class Solution {
public String multiply(String num1, String num2) {
// 1 2 3 i
// 4 5 6 j
// 1 8 [i+j+1][i+j]
// 1 2
// 0 6
// 1 5
// 1 0
// 0 5
if (num1 == null || num1.length() == 0 || num2 == null || num2.length() == 0) {
return "";
}
int[] res = new int[num1.length() + num2.length()];
for (int i = num1.length() - 1; i >= 0; i--) {
for (int j = num2.length() - 1; j >= 0; j--) {
int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
int pos0 = i + j;
int pos1 = i + j + 1;
mul += res[pos1];
res[pos0] += mul / 10;
res[pos1] = mul % 10;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < res.length; i++) {
if (sb.length() == 0 && res[i] == 0) continue;
sb.append(res[i] + "");
}
return sb.length() == 0 ? "0" : sb.toString();
}
}
一刷
55.37 %
class Solution {
public String multiply(String num1, String num2) {
if (num1 == null || num1.length() == 0 || num2 == null || num2.length() == 0) return "";
int l1 = num1.length();
int l2 = num2.length();
int[] result = new int[l1 + l2];
for (int i = l1 - 1; i >= 0; i--) {
for (int j = l2 - 1; j >= 0; j--) {
//int bit1 = Character.getNumericValue(num1.charAt(i));
//int bit2 = Character.getNumericValue(num2.charAt(j));
int bit1 = num1.charAt(i) - '0';
int bit2 = num2.charAt(j) - '0';
result[i + j + 1] += bit1 * bit2;
result[i + j] += result[i + j + 1] / 10;
result[i + j + 1] %= 10;
}
}
StringBuilder sb = new StringBuilder();
for (int k = 0; k < result.length; k++) {
if (result[k] == 0 && sb.length() == 0) continue;
sb.append(result[k]);
}
return sb.length() == 0 ? "0" : sb.toString();
}
}
No comments:
Post a Comment