博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Multiply Strings
阅读量:4709 次
发布时间:2019-06-10

本文共 1561 字,大约阅读时间需要 5 分钟。

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.

分析:对于此题,如果按照平时我们算乘法的办法,先将乘数的第一位乘以被乘数,然后第二位乘以被乘数,。。直到乘数的最后一位乘以被乘数,然后把上述结果错位相加。这里有一个规律,被乘数第i位和乘数第j位相乘的结果将加在结果的第i+j和第i+j+1位(模10的余数在第i+j位,进位在第i+j+1位),那么我们可以很方便的实现两个字符串的乘法。代码如下:

1 class Solution { 2 public: 3     string multiply(string num1, string num2) { 4         string result; 5         int n1 = num1.length(), n2 = num2.length(); 6         if(n1 == 0 || n2 == 0) return result; 7          8         vector
res(n1+n2, 0);//use vector stores multiply result 9 reverse(num1.begin(), num1.end());//reverse string10 reverse(num2.begin(), num2.end());11 12 for(int i = 0; i < n1; i++){13 int v1 = num1[i] - '0';14 for(int j = 0; j < n2; j++){15 int v2 = num2[j] - '0';16 res[i+j] += v1*v2;17 res[i+j+1] += res[i+j]/10;18 res[i+j] %= 10;19 }20 }21 22 transform(find_if(res.rbegin(), prev(res.rend()), [](int i){
return i > 0;}),res.rend(), back_inserter(result), [](int i){
return i + '0';});//transform each int in vector
to char, also remove preceding zeroes but the last zero23 return result;24 }25 };

transform函数的运用使代码行数更少,find_if(res.begin(), prev(res.rend()), [](int i){return i > 0;})除去结果中的preceding zeroes同时由于使用prev(res.rend())保护了只有一个0的情况。

转载于:https://www.cnblogs.com/Kai-Xing/p/4142902.html

你可能感兴趣的文章
linux详解sudoers
查看>>
java MAT 分析
查看>>
poj2828
查看>>
vs2015 Android SDK
查看>>
虚拟分区安装
查看>>
GeSHi Documentation
查看>>
PAT甲级1057 Stack【树状数组】【二分】
查看>>
Google内部培训过1.8万人的机器学习速成课
查看>>
基变换与坐标变换
查看>>
高观点下的初等数学
查看>>
Latex 琐碎
查看>>
卷积神经网络(CNN)的理解与总结
查看>>
关于parseInt你不知道的事
查看>>
java学习笔记day05
查看>>
Python-绑定与未绑定方法通俗讲解
查看>>
笨方法学python--打印
查看>>
WPF程序中App.Config文件的读与写
查看>>
day5-1继承
查看>>
如何单用户模式破解root密码&救援模式破解root密码
查看>>
面向对象
查看>>