43. Multiply Strings
2017-10-22 14:05
429 查看
Given two non-negative integers
as strings, return the product of
Note:
The length of both
< 110.
Both
only digits
Both
not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
模拟乘法运算过程。字符串数字num1和num2没有前导零,处理方便一些。程序如下:
class Solution {
public StringBuilder multiplySingleChar(String num1, char ch){
int carry = 0, val = 0;
StringBuilder s = new StringBuilder();
for (int i = num1.length() - 1; i >= 0; -- i){
s.insert(0, ((num1.charAt(i) - '0')*(ch - '0') + carry)%10);
carry = ((num1.charAt(i) - '0')*(ch - '0') + carry)/10;
}
if (carry != 0){
s.insert(0, carry);
}
return s;
}
public String addString(String num1, StringBuilder num2){
int carry = 0;
int index1 = num1.length() - 1, index2 = num2.length() - 1;
StringBuilder sum = new StringBuilder();
while (index1 >= 0&&index2 >= 0){
sum.insert(0, (num1.charAt(index1) - '0' + num2.charAt(index2) - '0' + carry)%10);
carry = (num1.charAt(index1) - '0' + num2.charAt(index2) - '0' + carry)/10;
index1 --;
index2 --;
}
while (index1 >= 0){
sum.insert(0, (num1.charAt(index1) - '0' + carry)%10);
carry = (num1.charAt(index1) - '0' + carry)/10;
index1 --;
}
while (index2 >= 0){
sum.insert(0, (num2.charAt(index2) - '0' + carry)%10);
carry = (num2.charAt(index2) - '0' + carry)/10;
index2 --;
}
if (carry > 0){
sum.insert(0, carry);
}
return new String(sum);
}
public String multiply(String num1, String num2) {
if (num1.equals("0")||num2.equals("0")){
return "0";
}
String val = new String("0");
for (int j = num2.length() - 1; j >= 0; -- j){
StringBuilder tmp = multiplySingleChar(num1, num2.charAt(j));
for (int i = num2.length() - 1; i > j; -- i){
tmp.append('0');
}
val = addString(val, tmp);
}
return val;
}
}
本程序涉及大量的StringBuilder插入操作,效率较低,可通过字符数组的方式重新改写相关操作,效率会提高很多。
num1and
num2represented
as strings, return the product of
num1and
num2.
Note:
The length of both
num1and
num2is
< 110.
Both
num1and
num2contains
only digits
0-9.
Both
num1and
num2does
not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
模拟乘法运算过程。字符串数字num1和num2没有前导零,处理方便一些。程序如下:
class Solution {
public StringBuilder multiplySingleChar(String num1, char ch){
int carry = 0, val = 0;
StringBuilder s = new StringBuilder();
for (int i = num1.length() - 1; i >= 0; -- i){
s.insert(0, ((num1.charAt(i) - '0')*(ch - '0') + carry)%10);
carry = ((num1.charAt(i) - '0')*(ch - '0') + carry)/10;
}
if (carry != 0){
s.insert(0, carry);
}
return s;
}
public String addString(String num1, StringBuilder num2){
int carry = 0;
int index1 = num1.length() - 1, index2 = num2.length() - 1;
StringBuilder sum = new StringBuilder();
while (index1 >= 0&&index2 >= 0){
sum.insert(0, (num1.charAt(index1) - '0' + num2.charAt(index2) - '0' + carry)%10);
carry = (num1.charAt(index1) - '0' + num2.charAt(index2) - '0' + carry)/10;
index1 --;
index2 --;
}
while (index1 >= 0){
sum.insert(0, (num1.charAt(index1) - '0' + carry)%10);
carry = (num1.charAt(index1) - '0' + carry)/10;
index1 --;
}
while (index2 >= 0){
sum.insert(0, (num2.charAt(index2) - '0' + carry)%10);
carry = (num2.charAt(index2) - '0' + carry)/10;
index2 --;
}
if (carry > 0){
sum.insert(0, carry);
}
return new String(sum);
}
public String multiply(String num1, String num2) {
if (num1.equals("0")||num2.equals("0")){
return "0";
}
String val = new String("0");
for (int j = num2.length() - 1; j >= 0; -- j){
StringBuilder tmp = multiplySingleChar(num1, num2.charAt(j));
for (int i = num2.length() - 1; i > j; -- i){
tmp.append('0');
}
val = addString(val, tmp);
}
return val;
}
}
本程序涉及大量的StringBuilder插入操作,效率较低,可通过字符数组的方式重新改写相关操作,效率会提高很多。
相关文章推荐
- leetcode || 43、Multiply Strings
- Java [Leetcode 43]Multiply Strings
- leetcode43 Multiply Strings
- 43. Multiply Strings
- 43. Multiply Strings
- LeetCode.415(43) Add Strings&&Multiply Strings
- 43. Multiply Strings
- LeetCode(43) Multiply Strings
- 43 - Multiply Strings
- 43. Multiply Strings
- Medium 43题 Multiply Strings
- 415/43 Add Strings/Multiply Strings
- leetcode-43 Multiply Strings
- [leetcode] 43.Multiply Strings
- LeetCode 43 Multiply Strings
- 【leetcode】【43】Multiply Strings
- 43. Multiply Strings 【66】【M】
- 43. Multiply Strings
- 43. Multiply Strings
- 43. Multiply Strings