【LeetCode】 43. Multiply Strings 字符串相乘(Medium)(JAVA)
题目地址: https://leetcode.com/problems/multiply-strings/
题目描述:
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3"
Output: "6"
Example 2:
Input: num1 = "123", num2 = "456"
Output: "56088"
Note:
1. The length of both num1 and num2 is < 110.
2. Both num1 and num2 contain only digits 0-9.
3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
4. You must not use any built-in BigInteger library or convert the inputs to integer directly.
题目大意
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
解题方法
采用小学学的乘法的法则,不断进位相乘即可
class Solution {
public String multiply(String num1, String num2) {
if (num1.length() == 0 || "0".equals(num1) || num2.length() == 0 || "0".equals(num2)) return "0";
StringBuilder res = new StringBuilder();
for (int i = 0; i < num2.length(); i++) {
int carry = 0;
for (int j = 0; j < num1.length(); j++) {
carry += (num2.charAt(num2.length() - 1 - i) - '0') * (num1.charAt(num1.length() - 1 - j) - '0');
if (res.length() < (i + j + 1)) {
res.insert(0, (char) ((carry % 10) + '0'));
} else {
carry += res.charAt(res.length() - 1 - i - j) - '0';
res.setCharAt(res.length() - 1 - i - j, (char) ((carry % 10) + '0'));
}
carry /= 10;
}
if (carry == 0) continue;
if (res.length() < (i + num1.length() + 1)) {
res.insert(0, (char) ((carry % 10) + '0'));
} else {
carry += res.charAt(res.length() - 1 - i - num1.length()) - '0';
res.setCharAt(res.length() - 1 - i - num1.length(), (char) ((carry % 10) + '0'));
}
}
return res.toString();
}
}
执行用时 : 15 ms, 在所有 Java 提交中击败了 37.93% 的用户
内存消耗 : 38.3 MB, 在所有 Java 提交中击败了 12.19% 的用户