题目:给定两个整型的数用string表示: num1 num2,求num1和num2的乘积
思路:从低位到高位,num1与num2的每一位相乘,总共需要进行len1轮乘法;
难度:Medium
代码:
public class Solution {
//计算两个数的乘积
public String multiply(String num1, String num2) {
if(num1.length() == 0 || num2.length() == 0 || num1 == null || num2 == null){
return "";
}
//如果num1或num2为空,则直接返回“0”
if(num1.equals("0") || num2.equals("0")){
return "0";
}
StringBuilder resultStr = new StringBuilder("");
int len1 = num1.length();
int len2 = num2.length();
int[] result = new int[len1+len2];
int k = len1;
while(k > 0){
int carry = 0;
for(int i = len2-1; i >= 0; i--){
int temp = Character.getNumericValue(num1.charAt(k-1)) * Character.getNumericValue(num2.charAt(i)) + carry;
carry = (result[i+k]+temp)/10;
result[i+k] = (result[i+k] + temp)%10;
}
k--;
result[k] = result[k] + carry;//每一轮乘完可能需要进位,这一行代码就是存进位的值
}
//去掉最高位为0
int j = 0;
if(result[0] == 0){
j = 1;
}
for(int i = j; i < len1+len2; i++){
resultStr.append(result[i]);
System.out.print(result[i]);
}
//return Arrays.toString(result);
return resultStr.toString();
}
}
- 来自Discuss里的解法(超级机智好吗!!!)
public String multiply(String num1, String num2) {
int m = num1.length(), n = num2.length();
int[] pos = new int[m + n];
for(int i = m - 1; i >= 0; i--) {
for(int j = n - 1; j >= 0; j--) {
int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
int p1 = i + j, p2 = i + j + 1;
int sum = mul + pos[p2];
pos[p1] += sum / 10;
pos[p2] = (sum) % 10;
}
}
StringBuilder sb = new StringBuilder();
//if里的判断就可以把高位0都去掉
for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
return sb.length() == 0 ? "0" : sb.toString();
}
总结Java中char转int的两种方法
1. int value = Character.getNumericValue(char c)
2. int value = c - '0'
总结数组转成string[1, 3, 5]
1. StringBuilder.append() + 数组遍历(string结果为:135)
2. Arrays.toString(arr) (输出结果:[1, 3, 5])
注意以上两种方法输出结果的不同!!!!!