大数相乘
class Solution {public String multiply(String num1, String num2) {String ZERO_STR = "0";String ONE_STR = "1";// 其中一个为0直接返回0if(ZERO_STR.equals(num1) || ZERO_STR.equals(num2)){return ZERO_STR;}// 其中一个为1直接返回另一个if(ONE_STR.equals(num1)){return num2;}if(ONE_STR.equals(num2)){return num1;}/**
乘法,关键2点
1、n位数与m位数相乘,长度不超过m+n位
2、两个数相乘的第一个数的第i位与第二个数的第j为数只会影响*/// int num1Size = num1.length();int num2Size = num2.length();int[] result = new int[num1Size+num2Size];for(int i = num2Size-1; i>=0; i--){int num2Tmp = num2.charAt(i)-'0';for(int j = num1Size-1; j>=0; j--){int num1Tmp = num1.charAt(j)-'0';int tmpResult = num2Tmp*num1Tmp;result[i+j+1] += tmpResult;result[i+j] += result[i+j+1]/10;result[i+j+1] = result[i+j+1]%10;}}StringBuffer res = new StringBuffer(); int index = 0;while(index < num1Size+num2Size && result[index] ==0){index++;}for(int i = index; i< num1Size+num2Size;i++){res.append(result[i]);}return res.toString();}
}
** 关键**
1、n位数与m位数相乘,长度不超过m+n位
2、两个数相乘的第一个数的第i位与第二个数的第j为数只会影响最后结果的i+j+1位和i+j位(如果有进位的话)