Leetcode-Multiply Strings
2014-11-21 03:22
267 查看
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.
Have you met this question in a real interview?
Solutiion:
a[i]*b[j] is the value of c[i+j]. So we have
Iter a[i]
iter b[j]
c[i+j] = a[i]*b[j]+c[i+j]
carry = c[i+j]/10;
c[i+j] = c[i+j]%10;
c[i+j+1] += carry. //NOTE: because we are dealing with string, we need to manipulate the char directly, after adding carry to c[i+j+1], c[i+j+1] may be larger than 10. Therefore, we need to keep dealing with carry, until in some higher bit, the carry becomes 0!
Solution2:
Directly use char arry. It is faster than StringBuilder.
Note: The numbers can be arbitrarily large and are non-negative.
Have you met this question in a real interview?
Solutiion:
a[i]*b[j] is the value of c[i+j]. So we have
Iter a[i]
iter b[j]
c[i+j] = a[i]*b[j]+c[i+j]
carry = c[i+j]/10;
c[i+j] = c[i+j]%10;
c[i+j+1] += carry. //NOTE: because we are dealing with string, we need to manipulate the char directly, after adding carry to c[i+j+1], c[i+j+1] may be larger than 10. Therefore, we need to keep dealing with carry, until in some higher bit, the carry becomes 0!
public class Solution { public String multiply(String num1, String num2) { if (num1.isEmpty() || num2.isEmpty()) return ""; if (num1.equals("0") || num2.equals("0")) return "0"; if (num1.equals("1")) return num2; if (num2.equals("1")) return num1; StringBuilder b1 = new StringBuilder(num1); StringBuilder b2 = new StringBuilder(num2); b1.reverse(); b2.reverse(); StringBuilder b3 = new StringBuilder(); //perform multiplication bit by bit; for (int i=0;i<b1.length();i++){ char c1 = b1.charAt(i); for (int j=0;j<b2.length();j++){ char c2 = b2.charAt(j); int val = (c1-'0')*(c2-'0'); if (b3.length()>(i+j)) val += b3.charAt(i+j)-'0'; int carry = val/10; val = val % 10; //put val of current bit into string. if (b3.length()>(i+j)) b3.replace(i+j,i+j+1,Integer.toString(val)); else b3.append((char)(val+'0')); //put carry into (i+j+1) bit. if (carry==0) continue; int curBit = i+j+1; while (carry!=0){ if (b3.length()>curBit){ val = (b3.charAt(curBit)-'0')+carry; carry = val / 10; val = val%10; b3.replace(curBit,curBit+1,Integer.toString(val)); curBit++; } else { b3.append((char)(carry+'0')); carry = 0; } } } } b3.reverse(); return b3.toString(); } }
Solution2:
Directly use char arry. It is faster than StringBuilder.
public class Solution { public String multiply(String num1, String num2) { if (num1.isEmpty() || num2.isEmpty()) return ""; if (num1.equals("0") || num2.equals("0")) return "0"; if (num1.equals("1")) return num2; if (num2.equals("1")) return num1; StringBuilder temp = new StringBuilder(num1); temp.reverse(); char[] b1 = temp.toString().toCharArray(); temp = new StringBuilder(num2); temp.reverse(); char[] b2 = temp.toString().toCharArray(); char[] b3 = new char[b1.length+b2.length]; Arrays.fill(b3,'0'); //perform multiplication bit by bit; for (int i=0;i<b1.length;i++){ char c1 = b1[i]; for (int j=0;j<b2.length;j++){ char c2 = b2[j]; int val = (c1-'0')*(c2-'0') + (b3[i+j]-'0'); int carry = val/10; val = val % 10; //put val of current bit into string. b3[i+j] = (char) (val+'0'); //put carry into (i+j+1) bit. if (carry==0) continue; int curBit = i+j+1; while (carry!=0){ val = (b3[curBit]-'0')+carry; carry = val / 10; val = val%10; b3[curBit] = (char)(val+'0'); curBit++; } } } temp = new StringBuilder(); int index = b3.length-1; for (int i=b3.length-1;i>=0;i--) if (b3[i]!='0'){ index = i; break; } for (int i=index;i>=0;i--) temp.append(b3[i]); return temp.toString(); } }
相关文章推荐
- 【LeetCode】Multiply Strings
- 【leetcode】Multiply Strings
- Leetcode: Multiply Strings
- [leetcode 43] Multiply Strings
- leetcode-multiply strings
- [leetcode] Multiply Strings
- leetcode:Multiply Strings
- Leetcode Multiply Strings
- [leetcode] Multiply Strings
- 【LeetCode】43. Multiply Strings
- LeetCode 043 Multiply Strings
- LeetCode之Multiply Strings
- leetcode_Multiply Strings
- LeetCode Multiply Strings
- leetcode 43 : Multiply Strings
- Multiply Strings[LeetCode]
- leetcode Multiply Strings 字符串的乘积问题
- [Leetcode] Multiply Strings
- Multiply Strings leetcode java
- leetcode: Multiply Strings