leetcode解题方案--043-- Multiply Strings
2017-11-23 21:01
441 查看
题目
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.Note:
The length of both num1 and num2 is < 110.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
分析
两个可能狠狠狠大的数相乘。考察乘法的分解。如何分解乘法再把结果想加?我用了递归,直到把乘法分解成一位数成一位数为止。
public static String multiply(String num1, String num2) { char[] n1 = num1.toCharArray(); char[] n2 = num2.toCharArray(); if (n1.length == 1 && n2.length == 1) { return String.valueOf((n1[0] - '0') * (n2[0] - '0')); } else if (n2.length == 1) { long sum = 0; for (int i = 0; i < n1.length; i++) { sum = sum*10; sum = sum + Integer.parseInt(multiply(num2,String.valueOf(num1.substring(i, i+1)))); } return String.valueOf(sum); } else if (n1.length == 1) { return multiply(num2, num1); } else { String sum = ""; for (int i = 0; i < n1.length; i++) { sum = sum+"0"; String xx = multiply(num2,String.valueOf(num1.substring(i, i+1))); char[] big = (sum.length()>xx.length()?sum:xx).toCharArray(); char[] small = (sum.length()<=xx.length()?sum:xx).toCharArray(); int add = 0; for (int k = 0;k<small.length;k++) { int a = small[small.length-1-k]-'0'; int b = big[big.length-1-k]-'0'; int addd = a+b+add; big[big.length-1-k] = (char) (addd%10+'0'); 4000 add = addd/10; } int p = big.length - small.length -1; while (add!=0 && p>=0) { big[p] = (char) ((big[p]+add-'0')%10+'0'); add=big[p]+add-'0'; add = add/10; p--; } sum = new String(big); if (add!=0) { sum ="1"+sum; } } return String.valueOf(sum); } }
迄今以来惟一一次晒了ac details,想哭。。
简单分析了一下原因,主要还是拆箱装箱和string的拼接。
比较好的地方是中间运算用了数组,
比较渣的地方是 为了不想多写一个方法,全程string。
建议用stringbuffer来递归,只是需要重写一个递归函数。
相关文章推荐
- [leetcode javascript解题]Multiply Strings
- leetcode 043 Multiply Strings
- LeetCode 043 Multiply Strings
- Java for LeetCode 043 Multiply Strings
- [LeetCode]题解(python):043-Multiply Strings
- [LeetCode]043-Multiply Strings
- LeetCode 043 Multiply Strings
- leetcode 043 —— Multiply Strings
- LeetCode解题报告—— Combination Sum & Combination Sum II & Multiply Strings
- LeetCode 043 Multiply Strings
- [LeetCode] Multiply Strings 解题报告
- LeetCode: Multiply Strings 解题报告
- [LeetCode] Multiply Strings 解题报告
- 【LeetCode】Multiply Strings 解题报告
- [leetcode] Multiply Strings
- Leetcode #43. Multiply Strings 字符串相乘 解题报告
- LeetCode Multiply Strings
- leetcode解题方案--018--4 sum
- [Leetcode] 43. Multiply Strings 解题报告
- leetcode解题方案--022--Generate Parentheses