python leetcode 字符串相乘实例详解


Posted in Python onSeptember 03, 2018

给定两个以字符串形式表示的非负整数 num1 和  num2 ,返回  num1 和  num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"

说明:

  1. num1  和  num2  的长度小于110。
  2. num1  和  num2  只包含数字  0-9 。
  3. num1  和  num2  均不以零开头,除非是数字 0 本身。

不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

从题目要求来看,应该是让我们实现一个比较省内存的大数乘法,先分享几个我在discuss中发现的不太切合题意的解法:

class Solution:
  def multiply(self, num1, num2):
    """
    :type num1: str
    :type num2: str
    :rtype: str
    """
    return str(eval(num1+'*'+num2))

这个可以说是个毫无技术含量的解法,如果面试的时候掏出这种解法,八成是跪了。

还有很多人使用了以下的解法。

class Solution:
  def multiply(self, num1, num2):
    """
    :type num1: str
    :type num2: str
    :rtype: str
    """
    dict = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
    if (num1=='0' or num2=='0'):
      return "0"
    n1 = 0
    n2 = 0
    for c in num1:
      val = dict[c]
      n1 = n1*10 + val
    for s in num2:
      val = dict[s]
      n2 = n2*10 + val
    result = n1 * n2;
    return str(result)

这种解法我觉得还是没有切合题意,将注意力放在的字符串转数字上,乘法还是使用的*。题目要求不能将输入直接转成数字类型,解体人自己实现了int方法完成了字符串的转换,好像是符合要求,但有投机取巧的感觉。

我来分享一下我的解法,思路很简单也很好理解,当我们徒手计算222*11时我们怎么计算呢,肯定是分解成222+2220来计算的,那么我们就可以使用一个一维列表来记录计算结果11分解成10+1,第一轮计算列表的结果为[0, 2, 2, 2],第二轮计算后变为[2, 2+2, 2+2, 2]计算结束。如果需要进位的话,进位的计算放到最后一步。

class Solution(object):
  def multiply(self, num1, num2):
    """
    :type num1: str
    :type num2: str
    :rtype: str
    """
    if num1 == "0" or num2 == "0":
      return "0"
    num1 = num1[::-1]
    num2 = num2[::-1]
    str_list = [0 for _ in range(len(num1)+len(num2))]
    for i in range(len(num1)):
      for j in range(len(num2)):
        str_list[i+j] += (int(num1[i])*int(num2[j]))
    result = ""
    up = 0
    for i in str_list:
      now = i + up
      cur = now % 10
      up = now / 10
      result += str(cur)
    begin = 0
    result = result[::-1]
    for i in result:
      if i == "0":
        begin += 1
      else:
        break
    return result[begin:]
Python 相关文章推荐
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python3实现转换Image图片格式
Jun 21 Python
python实现textrank关键词提取
Jun 22 Python
Python爬虫将爬取的图片写入world文档的方法
Nov 07 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
python函数中将变量名转换成字符串实例
May 11 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 #Python
Python实现多级目录压缩与解压文件的方法
Sep 01 #Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 #Python
Python pymongo模块常用操作分析
Sep 01 #Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 #Python
python使用webdriver爬取微信公众号
Aug 31 #Python
python爬取微信公众号文章
Aug 31 #Python
You might like
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
Python中生成Epoch的方法
2017/04/26 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
美国社交购物市场:MassGenie
2019/02/18 全球购物
优秀团员个人事迹材料
2014/01/29 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
生产现场禁烟通知
2015/04/23 职场文书
学生犯错保证书
2015/05/09 职场文书
中秋节晚会开场白
2015/05/29 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
小学教代会开幕词
2016/03/04 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android
一文搞懂Redis中String数据类型
2022/04/03 Redis
Go归并排序算法的实现方法
2022/04/06 Golang