您的位置:首页 > 其它

LeetCode 43: Multiply Strings

2017-08-22 14:29 375 查看
class Solution {
public String multiply(String num1, String num2) {
if (num1 == null || num2 == null || num1.length() == 0 || num2.length() == 0 || num1.equals("0") || num2.equals("0")) {
return "0";
}

int length = num1.length() + num2.length();
int[] multi = new int[length];
Map<Integer, Integer> carry = new HashMap<>();
int i = num1.length() - 1;

for (; i >= 0; i--) {
for (int j = num2.length() - 1; j >= 0; j--) {
int current = (int)(num1.charAt(i) - '0') * (int)(num2.charAt(j) - '0') + carry.getOrDefault(i + j + 1, 0) + multi[i + j + 1];
carry.put(i + j + 1, 0);
multi[i + j + 1] = current % 10;
carry.put(i + j, carry.getOrDefault(i + j, 0) + current / 10);
if (i == 0 && j == 0 && carry.get(0) > 0) {
multi[0] = carry.get(0);
}
}
}

boolean flag = true;
StringBuilder sb = new StringBuilder();
for (i = 0; i < length; i++) {
if (multi[i] == 0 && flag) {
continue;
} else {
flag = false;
sb.append((char)(multi[i] + '0'));
}
}

return sb.toString();
}
}


1. Multiplication length are sum of two lengths.

2. Multiplied value should be ADDED to the position not REPLACE since there could be other places multiplied to.

3. Remember to clear the map since the position is not one time reach.

4. Check the first value as the value is not counted in multi array.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: