LeetCode OJ:Multiply Strings (字符串乘法)
2015-10-11 21:23
323 查看
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.
给出两个字符串,返回对应数字想乘后的字符串,由于这个字符串可能很大,所以不能采用一般的乘法,这里用的方法是模拟手工的乘法运算,算法
本身很简单,就是当时写的时候有些很小的细节搞错了,找了很久的错。啊啊啊啊啊,要细心啊。代码如下,没什么好说的:
java的api真是恶心,处理字符串处理了半天,最后debug通过,往上一贴竟然是TLE的代码,代码在下面,应该是我对字符串的处理比较耗时间了,其实最好的应该是先讲String转换成List,List里面相对的API的函数多一点,String里面连最普通的reverse函数都没有。先马一下这种做法,有时间了再来写。下面的这个道理上应该没有任何问题,就是字符串处理的太慢了。
Note: The numbers can be arbitrarily large and are non-negative.
给出两个字符串,返回对应数字想乘后的字符串,由于这个字符串可能很大,所以不能采用一般的乘法,这里用的方法是模拟手工的乘法运算,算法
本身很简单,就是当时写的时候有些很小的细节搞错了,找了很久的错。啊啊啊啊啊,要细心啊。代码如下,没什么好说的:
class Solution { public: string multiply(string num1, string num2) { if(num1 == "0" || num2 == "0") return "0"; int steps = 0; int pos = 0; int flag = 0; int val = 0; string result = ""; reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); int len1 = num1.length(); int len2 = num2.length(); for(int i = 0; i < len1; ++i){ pos = steps; for(int j = 0; j < len2; ++j){ val = (num1[i] - '0')*(num2[j] - '0') + flag; if(result.size() <= pos){ result.append(1, val%10 + '0'); }else{ val += (result[pos] - '0'); result[pos] = val%10 + '0'; } flag = val/10; pos++; } if(flag > 0) result.append(1, flag + '0'); flag = 0; steps++; } reverse(result.begin(), result.end()); return result; } };
java的api真是恶心,处理字符串处理了半天,最后debug通过,往上一贴竟然是TLE的代码,代码在下面,应该是我对字符串的处理比较耗时间了,其实最好的应该是先讲String转换成List,List里面相对的API的函数多一点,String里面连最普通的reverse函数都没有。先马一下这种做法,有时间了再来写。下面的这个道理上应该没有任何问题,就是字符串处理的太慢了。
public class Solution { public String multiply(String num1, String num2) { if(num1.equals("0") || num2.equals("0")) return (new String("0")); int step = 0; int pos = 0; int carry = 0; int val = 0; String result = new String(""); num1 = ReverseStr(num1); num2 = ReverseStr(num2); for(int i = 0; i < num1.length(); ++i){ //java的api好乱啊,一会是length一会有是size() pos = step; for(int j = 0; j < num2.length(); ++j){ val = (num1.charAt(i)-'0')*(num2.charAt(j)-'0') + carry; if(pos >= result.length()) result += (char)(val%10 + '0'); else{ val += (result.charAt(pos)-'0'); result = (new StringBuffer(result)).replace(pos, pos + 1, "" + (char)(val%10+'0')).toString(); } carry = val/10; pos++; } if(carry != 0) result += (char)(carry +'0'); carry = 0; step++; } return ReverseStr(result); } public String ReverseStr(String str){ return (new StringBuffer(str)).reverse().toString(); } }
相关文章推荐
- 程序化交易生态图谱2015年7月版
- 连载《一个程序猿的生命周期》- 37、《从0到1》中提到的4点创业信条! 【含】李彦宏的《开讲啦》
- 列出display的值,并说明它们的作用
- 文件I/O实践(1) --基础API
- word2013中表格文档最后空白页删不掉的问题
- 适配iOS9https请求
- 欢迎使用CSDN-markdown编辑器
- Bootstrat(一)
- The martian 2015 火星救援百度网盘下载真正可用的。2015-10-11更新
- Spring in Action 学习笔记一
- 用imageROI来增加某范围的像素
- 该小组的七年之痒
- 黑马程序员——OC中的协议:protocol
- Java实现滚动字幕
- HadoopRPC源码解析
- 在excel中自动生成序号
- Code.R团队展示
- python中的矩阵运算
- Linux学习首页
- 10.08NOIP模拟赛