LeetCode Multiply Strings
2015-08-18 03:32
405 查看
原题链接在这里:https://leetcode.com/problems/multiply-strings/
Method 1: 通过这道题,学到了BigInteger的用法, 他的constructor 可以直接从string建立BigInteger, 但要注意它的乘法API是
bi1.multiply(bi2).
若是中间需要考虑溢出,还有bi1.intValue(), bi1.longValue()等API.
Method 2: 若num1.length() = m, num2.length() = n, 那么结果的长度为m+n-1(没有进位),或者是m+n(有进位)。没有进位时,
结果对应的i位等于 (num1的1位 * num2的i位 + num1的2位 * num2的i-1位 + ... + num1的i位 * num2的1位)%10. 当然
前提是不能有溢出。为了方便计算与理解,可以先反转两个string,最后计算的结果的most significant位在最后,所
以需要反转回来。
AC Java:
Method 1: 通过这道题,学到了BigInteger的用法, 他的constructor 可以直接从string建立BigInteger, 但要注意它的乘法API是
bi1.multiply(bi2).
若是中间需要考虑溢出,还有bi1.intValue(), bi1.longValue()等API.
Method 2: 若num1.length() = m, num2.length() = n, 那么结果的长度为m+n-1(没有进位),或者是m+n(有进位)。没有进位时,
结果对应的i位等于 (num1的1位 * num2的i位 + num1的2位 * num2的i-1位 + ... + num1的i位 * num2的1位)%10. 当然
前提是不能有溢出。为了方便计算与理解,可以先反转两个string,最后计算的结果的most significant位在最后,所
以需要反转回来。
AC Java:
import java.math.*; public class Solution { public String multiply(String num1, String num2) { /*Method 1 if(num1 == null || num2 == null || num1.length() ==0 || num2.length() == 0) return ""; BigInteger bi1 = new BigInteger(num1); BigInteger bi2 = new BigInteger(num2); BigInteger res = bi1.multiply(bi2); return res.toString(); */ //Method 2 if(num1 == null || num2 == null || num1.length() ==0 || num2.length() == 0) return ""; if(num1.charAt(0) == '0'||num2.charAt(0) == '0'){ return "0"; //error } int len1 = num1.length(); int len2 = num2.length(); num1 = new StringBuilder(num1).reverse().toString(); //error num2 = new StringBuilder(num2).reverse().toString(); StringBuilder res = new StringBuilder(); int carryDig = 0; for(int i = 0; i < len1+len2-1; i++){ int mul = 0; for(int j = 0; j<=i; j++){ if(j<len1 && (i-j)<len2){ mul += (int)(num1.charAt(j)-'0') * (int)(num2.charAt(i-j)-'0'); } } mul += carryDig; res.append(mul%10); carryDig = mul/10; } if(carryDig != 0){ res.append(carryDig); } return res.reverse().toString(); } }
相关文章推荐
- LeetCode Multiply Strings
- leetcode 8
- Standard C Episode 10
- Android 平台下的Vuforia 5环境搭建以及Image Target生成
- MongoDB 重启之后无法连接问题
- Standard C Episode 9
- 八数码问题——双向广度优先搜索解决
- 八数码问题——双向广度优先搜索解决
- Implementing Stacks Using Queues
- Standard C Episode 8
- BZOJ4237 : 稻草人
- ACM入门指南
- Standard C Episode 7
- Standard C Episode 6
- UVA 12716 GCD XOR(数论+枚举+打表)
- Standard C Episode 5
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
- Standard C Episode 4
- hiho一下 第五十九周 题目1 : Performance Log
- 基于TCP协议的网络通信