[LeetCode]Multiply Strings
来源:互联网 发布:杭州软件测试培训班 编辑:程序博客网 时间:2024/06/05 22:45
Question
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.
Converting the input string to integer is NOT allowed.
You should NOT use internal library such as BigInteger.
本题难度Medium。
【复杂度】
时间 O(N*M) 空间 O(N+M+1)
【思路】
模拟手工运算
【注意】
1、两个数字相乘的最长位数不会超过两个数字的位数之和
2、在进行String->int[ ]
转换时(16-19行),是倒序转换,便于后面计算(21-16行)
3、对于输入参数其中一个为0
的情况要单独对待(10-11行),否则会出现结果如:"000"
,逻辑正确,但是不符合要求。
4、21-16行不能写成:
for(int i=0;i<size1;i++) for(int j=0;j<size2;j++){ res[i+j]+=(n1[i]*n2[j])%10; res[i+j+1]+=(n1[i]*n2[j])/10; res[i+j]%=10; }
如果res[i+j]+=(n1[i]*n2[j])%10;
得到的res[i+j]
是两位数呢?所以要先把res[i+j]
计算出来,这样进位数就是正确的。
5、有时候会出现"0123"
这种结果,也不符合要求,要对"0"
进行去除(29-30行)
【代码】
public class Solution { public String multiply(String num1, String num2) { //require String ans=""; if(num1==null||num2==null) return "0"; int size1=num1.length(),size2=num2.length(); if(size1<1||size2<1) return "0"; if(num1.equals("0")||num2.equals("0")) return "0"; //String -> int[] int[] n1=new int[size1]; int[] n2=new int[size2]; int[] res=new int[size1+size2]; for(int i=0;i<size1;i++) n1[size1-1-i]=num1.charAt(i)-'0'; for(int i=0;i<size2;i++) n2[size2-1-i]=num2.charAt(i)-'0'; //invariant for(int i=0;i<size1;i++) for(int j=0;j<size2;j++){ res[i+j]+=n1[i]*n2[j]; res[i+j+1]+=res[i+j]/10; res[i+j]%=10; } for(int i=0;i<res.length-1;i++) ans=Integer.toString(res[i])+ans; if(res[res.length-1]!=0) ans=Integer.toString(res[res.length-1])+ans; //ensure return ans; }}
参考
Leetcode: Multiply Strings
0 0
- LeetCode: Multiply Strings
- LeetCode Multiply Strings
- LeetCode: Multiply Strings
- [Leetcode] Multiply Strings
- [LeetCode] Multiply Strings
- [Leetcode] Multiply Strings
- LeetCode 45: Multiply Strings
- [LeetCode]Multiply Strings
- [LeetCode] Multiply Strings
- LeetCode-Multiply Strings
- [leetcode] Multiply Strings
- LeetCode - Multiply Strings
- Leetcode: Multiply Strings
- LeetCode题解:Multiply Strings
- leetcode Multiply Strings
- LeetCode Multiply Strings
- LeetCode | Multiply Strings
- [LeetCode] Multiply Strings
- Android热修复原理
- eclipse下保证jdbc以SQL身份验证方式连接SQL Server2008数据库
- instanceof 和原型链
- EasyUI问题总结
- 关于display:inline-block
- [LeetCode]Multiply Strings
- C++ 运算符重载
- Java EE 包含哪些技术
- 数据结构 二:表(list)、栈(stack)、队列(Queue)
- 14.1.1 使用InnoDB 表的好处:
- 404、500错误拦截
- Flask + Gunicorn 部署到 Heroku服务器,sqlite数据库,loggins一
- printf输出数组的内容
- Android EditText imeOptions属性详解