42. 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.
---
09/21, Review
顺序,
最高位是0要去掉
public class Solution { public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) return "0"; int l1 = num1.length(); int l2 = num2.length(); int newlen = l1+l2; int[] n1 = new int[l1]; int[] n2 = new int[l2]; int[] res = new int[newlen]; // convert string to number array for (int i=0; i<l1; i++) { n1[i] = num1.charAt(l1-1-i) - '0'; } for (int i=0; i<l2; i++) { n2[i] = num2.charAt(l2-1-i) - '0'; } // multiply for (int i=0; i<l1; ++i) { for (int j=0; j<l2; ++j) { res[i+j] += n1[i]*n2[j]; } } // convert to string. carray StringBuilder sb = new StringBuilder(); for (int i=0; i < newlen; i++) { sb.append((char)(res[i] % 10 + '0')); // carry int carry = res[i] / 10; if(carry > 0 && i<newlen-1) res[i+1] += carry; } // trim 0 at the biginning if(sb.charAt(newlen-1) == '0') sb.deleteCharAt(newlen-1); // reverse sb = sb.reverse(); return sb.toString(); } }
---
Reference
public class Solution { public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) return "0"; int l1 = num1.length(), l2 = num2.length(); int newlen = l1+l2; int[] n1 = new int[l1]; int[] n2 = new int[l2]; int[] res = new int[newlen]; // convert string to number array for (int i=0; i<l1; ++i) { n1[i] = num1.charAt(i) - '0'; } for (int i=0; i<l2; ++i) { n2[i] = num2.charAt(i) - '0'; } // multiply for (int i=0; i<l1; ++i) { for (int j=0; j<l2; ++j) { res[i+j+1] += n1[i]*n2[j]; } } // convert back to string . reverse prder StringBuilder sb = new StringBuilder(); for (int k=newlen-1; k>=0; k--) { sb.append((char)(res[k] % 10 + '0')); if (k>0) res[k-1] += res[k] / 10; } // trim 0 at the biginning if(sb.charAt(newlen- 1) == '0') sb.deleteCharAt(newlen- 1); // reverse sb = sb.reverse(); return sb.toString(); } }
浙公网安备 33010602011771号