您的位置:首页 > 其它

LeetCode 43 Multiply Strings

2015-12-22 13:57 465 查看
Multiply Strings

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

Subscribe to see which companies asked this question
解法思路:
这是一道经典的题目,我们要实现的就是基本的乘法运算,这里的难点就是边界问题以及进位的问题,为了处理位运算,我们把字符串获得的结果直接放在整型二维数组中,对二维数组里面的值进行运算。当然这里要注意ASCII码和数字的转换。最后对二维数组的结果求和,然后还原为字符串。
代码如下:
public String multiply(String num1, String num2) {
int len1 = num1.length();
int len2 = num2.length();
if(len1==1&&len2==1){
int k = num1.charAt(0)-'0';
int g=num2.charAt(0)-'0';
return String.valueOf(k*g);
}
int [][]re1 = new int[len2][len1+len2];//考虑进位
for (int i = len2-1; i >= 0; i--) {
int k = num2.charAt(i)-'0';
int type = 0;
for (int j = len1-1; j >= 0; j--) {
int g=num1.charAt(j)-'0';
int r = k*g;
if(type != 0){
r+=type;
type = 0;
}
if(r/10>=1){
type = r/10;
r -=10*(r/10);
}
re1[i][j+1]+=r;
}
//
int t = 0;
if(type>0){
re1[i][0]+=type;
}
}

//字符串求和
int rlen = re1.length;
int t1 = re1[rlen-1].length;
int []result = new int[rlen + t1 -1];
Arrays.fill(result, -1);
for (int i = 0; i < re1.length; i++) {
for (int j = 0; j < re1[i].length-i; j++) {
int g = re1[i][j];
if(result[j+i]==-1)result[j+i]=0;
result[j+i]+=g;

}
}
for (int i = result.length-1; i > 0; i--) {
if(result[i]>=10){
result[i-1]+=result[i]/10;
result[i]-=10*(result[i]/10);
}
}
String resu = "";
int type =0;
for (int i = 0; i <=result.length-1; i++) {
if(type ==0&&result[i]==0){
continue;
}else{
if(result[i]!=-1){
String t = String.valueOf(result[i]);
resu = resu.concat(t);
type =1;}
}
}
if(resu.length()==0){
return "0";
}
return resu;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: