leetcode 第42题 Multiply Strings
题目: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.
就是实现大数乘法。嘿嘿,我先用long long直接乘试试手感,试过了不行。所以还是要用字符串表示才行。
我是这样做的,先实现两个子函数,一个是实现一个数和一个字符串的数相乘的结果。另一个是实现两个字符串相加的结果。这样,大数乘法就可以由其中一个大数的每一位和另一个大数相乘然后再相加,就是要注意分解一个大数的时候记得要在结果后面加上零。例如12乘以3,我们把12分成1和2分别和3相乘,然后1和3相乘的后面要加一个零,因为1处于12的十位数。
oj上居然用了148ms。不忍直视啊。写了那么长。。。虽然Accept了
class Solution {
public:
string singleMulti(string s, char a) // 给定一个字符串和一个字符,返回乘积(字符串形式)
{
if (s.size() == )
return s;
if (a == '')
return "";
int c = a - '';
int up = ;
for (int i = s.size() - ; i > -; --i)
{
int tmp = s[i] - '';
int sum_now = up + c*tmp;
s[i] = sum_now% + '';
up = sum_now/;
}
if (up != )
{char tmp = up + '';
s = tmp + s;}
return s;
}
string sum42(string s1, string s2) // sum of two string
{
if (s1.size() == )
return s2;
if (s2.size() == )
return s1;
string s = s1;
int len1 = s1.size() - , len2 = s2.size() - , up = ;
while(len1 > - && len2 > -)
{
int n1 = s1[len1] - '';
int n2 = s2[len2] - '';
int n3 = n1 + n2 + up;
s[len1] = n3% + '';
up = n3/;
len1--;len2--;
}
while(len1 > -)
{
int n1 = s1[len1] - '';
int n3 = n1 + up;
s[len1] = n3% + '';
up = n3/;
len1--;
}
while(len2 > -)
{
int n2 = s2[len2] - '';
int n3 = n2 + up;
char tmp = n3% + '';
s = tmp + s;
up = n3/;
len2--;
}
if(up)
{
char tmp = up + '';
s = tmp + s;
}
return s;
}
string multiply(string num1, string num2)
{
if (num1 == "" || num2 == "")
return "";
int len1 = num1.size()-;
string s;
int cnt = ;
while(len1 > -)
{
string tmp = "";
int tn = cnt;
while(tn)
{
tmp = '' + tmp;
tn--;
}
s = sum42(s,singleMulti(num2, num1[len1])+ tmp);
len1--;
cnt++;
}
return s;
}
};
由于自己的代码那么长,所以也学习了下别人的,例如这里利用下面的图,很好理解。将图贴出:
我们以289*758为例
按照这个图我写了下代码(跟原版主略有不同):
class Solution {
public:
string multiply(string num1, string num2)
{
if (num1 == "" || num2 == "")
return "";
string s = "";
int len1 = num1.size(), len2 = num2.size();
vector<int> container(len1+len2, ); // 用来存表中红色部分值 for (int i = ; i < len1; ++i)
for (int j = ; j < len2; ++j)
{
container[i+j] += (num1[len1 - - i]-'')*(num2[len2 - - j]-''); // 注意标号
}
//处理进位
int up = , cnt = ;
while(cnt<len1+len2)
{
container[cnt] += up;
up = container[cnt]/;
container[cnt] %= ;
cnt++;
}
cnt--;
while(cnt > - && !container[cnt])//不应该有的零去掉
{
cnt--;
};
while(cnt > -) // 输出就是结果,注意方向被搞反了
{
char ch = container[cnt] + '';
s += ch;
cnt--;
}
return s;
}
};
这个主要是注意存的方向,不要把小标弄混淆了。输出的时候也要注意,别搞反了。低于60ms过。
leetcode 第42题 Multiply Strings的更多相关文章
- LeetCode 43. 字符串相乘(Multiply Strings)
43. 字符串相乘 43. Multiply Strings 题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...
- [LeetCode] 大数问题,相加和相乘,题 Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- LeetCode(43)Multiply Strings
题目 Given two numbers represented as strings, return multiplication of the numbers as a string. Note: ...
- leetcode个人题解——#43 Multiply Strings
思路:高精度乘法就可以了. 有两个错误以前没在意,1.成员属性定义时候不能进行初始化, vector<); 这样隐性调用了函数进行初始化的形式特别要注意,也是错误的: 2.容器类只有分配了空间时 ...
- LeetCode第[42]题(Java):Trapping Rain Water (数组方块盛水)——HARD
题目:接雨水 难度:hard 题目内容: Given n non-negative integers representing an elevation map where the width of ...
- [LeetCode] 415 Add Strings && 67 Add Binary && 43 Multiply Strings
这些题目是高精度加法和高精度乘法相关的,复习了一下就做了,没想到难住自己的是C++里面string的用法. 原题地址: 415 Add Strings:https://leetcode.com/pro ...
- LeetCode解题报告—— Combination Sum & Combination Sum II & Multiply Strings
1. Combination Sum Given a set of candidate numbers (C) (without duplicates) and a target number (T) ...
- leetcode面试准备:Multiply Strings
1 题目 Given two numbers represented as strings, return multiplication of the numbers as a string. Not ...
- [Leetcode][Python]43: Multiply Strings
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 43: Multiply Stringshttps://leetcode.co ...
随机推荐
- java项目导出为一个可执行文件jar包
1.选择要导出的项目. 对->export,选java在下面JAR file->next,选择要导出路径->next,finish. 2.选中导出的jar文件用压缩文件管理器打开 3 ...
- spring mvc 控制器方法传递一些经验对象的数组
由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...
- jQuery整理笔记5----jQuery大事
一.大事 1.载入中DOM $(document).ready() 这个第一节里具体介绍了 2.事件绑定 jQuery定义了bind()方法作为统一的接口.用来为每个匹配元素绑定事件处理程序.其基本的 ...
- twitter接口开发
前一阵子研究了下twitter接口,发现网上的资料不是很多.遂花了些心血,终于有所收获~ 现在有时间赶紧整理出来便于自己以后查阅,也想帮助有困难的同学们.废话不多说,现在就以最简洁的方式开始了.注意: ...
- 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)
mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...
- sql小总结
---------------------------------------------------------------------------------------------------- ...
- android使用ffmpeg
cygwin上文编译文章. 在ffmpeg/arm添加的文件夹Android.mk 的主要目的是为了宣布动态库libs下一个 LOCAL_PATH:= $(call my-dir) include $ ...
- KMP算法之从next[]到nextVal[] (转)
前些日子写了一篇KMP算法的博文,浅谈数据结构之KMP(串中的模式匹配算法),在这片文章中,谈到了一个模式串K值的记录数组 next[],详细可看那篇文章,其实,前面定义的next[]数组是有一定缺陷 ...
- 【Flume NG用户指南】(2)构造
作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处: http://blog.csdn.net/zhoubangtao/article/details ...
- GG同步sqlserver报错一个案例 Invalid date format
在里面Oracle表同步sqlserver时间,在sqlserver当应用程序数据的结束.您可能会遇到这个错误. 2014-05-17 17:20:24 WARNING OGG-01154 SQL e ...