[leetcode-43]Multiply Strings(java)
来源:互联网 发布:浅谈人工智能 编辑:程序博客网 时间:2024/05/21 03:19
问题描述:
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.
分析:分别构造两个函数,一个是计算字符串与单个字符的乘积。一个是一个字符串与一个字符串相加的和。注意,还有有个记录错位的标记。
这里,要特别注意的是怎么从从整数变成字符,例如:
res.append((char)(carry+48));这个地方如果没有强制类型转换,那么就是错误的了。
而从字符变成int时,只要减48即可。48是’0‘的ASCII,这一点似乎不如C语言里面的直观。
代码如下:432ms
public class Solution { public String multiply(String num1, String num2) { StringBuffer resBuffer; StringBuffer baseBuffer; if(num1==""||num2=="") return ""; int num2Len = num2.length(); baseBuffer = multiplyWithChar(num1,num2.charAt(num2Len-1)); for(int i = num2Len-2;i>=0;i--){ resBuffer = multiplyWithChar(num1,num2.charAt(i));//反的 baseBuffer = addString(baseBuffer,resBuffer,num2Len-i-1);//反着加 } //再反转 baseBuffer.reverse(); //从前向后除去多余0 int i; int tmpLen = baseBuffer.length(); for(i = 0;i<tmpLen;i++){ if(baseBuffer.charAt(i)!='0') break; } if(i==tmpLen) return "0"; baseBuffer.delete(0,i); return baseBuffer.toString(); } private StringBuffer addString(StringBuffer baseBuffer,StringBuffer unBaseBuffer,int index){ int baseLen = baseBuffer.length(); int unBaseLen = unBaseBuffer.length(); char[] baseChar = baseBuffer.toString().toCharArray(); char[] unBaseChar = unBaseBuffer.toString().toCharArray(); StringBuffer res = new StringBuffer(); for(int i = 0;i<index;i++) res.append(baseChar[i]); int baseIndex = index; int unBaseIndex = 0; int carry = 0; while(baseIndex<baseLen||unBaseIndex<unBaseLen){ char base; char unBase; int tmpVal = 0; if(baseIndex<baseLen) { base = baseChar[baseIndex++]; tmpVal += base - 48; } if(unBaseIndex<unBaseLen) { unBase = unBaseChar[unBaseIndex++]; tmpVal += unBase - 48; } tmpVal += carry; carry = tmpVal/10; res.append((char)(tmpVal%10+48)); } if(carry!=0) res.append((char)(carry+48)); return res; } private StringBuffer multiplyWithChar(String num1,char c){ StringBuffer res = new StringBuffer(); char[] numChar = num1.toCharArray(); int val = c-48; int base; int carry = 0; int tmpVal; if(val==0) { res.append('0'); return res; } for(int i = numChar.length-1;i>=0;i--){ base = numChar[i]-48; tmpVal = base*val+carry; base = tmpVal%10; carry = tmpVal/10; res.append((char)(base+48)); } if(carry>0) res.append((char)(carry+48)); return res; }}
0 0
- [leetcode-43]Multiply Strings(java)
- [Leetcode] Multiply Strings (Java)
- [LeetCode][Java] Multiply Strings
- LeetCode : Multiply Strings (java)
- leetcode:Multiply Strings(JAVA)
- Multiply Strings leetcode java
- LeetCode(43) Multiply Strings
- [leetcode 43] Multiply Strings
- [LeetCode 43]Multiply Strings
- leetcode || 43、Multiply Strings
- leetcode-43 Multiply Strings
- Multiply Strings leetcode 43
- leetcode 43: Multiply Strings
- Leetcode 43 Multiply Strings
- leetcode 43 : Multiply Strings
- Leetcode #43 Multiply Strings
- leetcode 43: Multiply Strings
- LeetCode(43) Multiply Strings
- 暑假集训第三周周三赛 STL E - Gunner 射鸟
- 在云计算时代,如何监控云服务的 SLA ?
- Android 当Service遇到Handler
- Observer模式
- poj 1258 Agri-Net
- [leetcode-43]Multiply Strings(java)
- Bridging signals
- H264 各种profile
- Ubuntu 12.04 安装中文输入法
- 数据结构---单链表(3)
- 又跳了一天,懈怠无时无刻不在侵蚀我啊!!
- Linux_历史
- POJ2385Apple Catching【dp】
- hdu-1213 How Many Tables