利特码 43. 字符串乘法
最编程
2024-04-06 09:21:21
...
题目链接https://leetcode.cn/problems/multiply-strings/description/
错误:
class Solution {
public String multiply(String num1, String num2) {
int n = num1.length();
int m = num2.length();
int a=0 , b=0;
for(int i=0;i<n;i++){
a = a*10 + num1.charAt(i) - '0';
}
for(int i=0;i<m;i++){
b = b*10 + num2.charAt(i) - '0';
}
int r = a*b;
String res = Integer.toString(r);
return res;
}
}
数太大时,超出int类型的范围了。
既然不可以直接转换成int相乘再转回string,那每一位数都依次计算吧。
正确:
public String multiply(String num1, String num2) {
if("0".equals(num1) || "0".equals(num2)){
return "0";
}
int n = num1.length();
int m = num2.length();
int[] ans=new int[n+m];
for(int i=n-1;i>=0;i--){
int a = num1.charAt(i)-'0';
for(int j=m-1;j>=0;j--){
int b = num2.charAt(j)-'0';
int sum = ans[i+j+1] + a * b;
ans[i+j+1] = sum%10;
ans[i+j] += sum/10;
}
}
StringBuilder sb=new StringBuilder();
for(int i=0;i<ans.length;i++){
if(i==0 && ans[i]==0){
continue;
}
sb.append(ans[i]);
}
return sb.toString();
}
上一篇: 什么是鼠疫?-鼠疫的来源
下一篇: 营卫气血