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中定义结构体的方法
Mar 04 Python
python发布模块的步骤分享
Feb 21 Python
全面了解Python环境配置及项目建立
Jun 30 Python
python3写的简单本地文件上传服务器实例
Jun 04 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
PyQt5组件读取参数的实例
Jun 25 Python
python适合人工智能的理由和优势
Jun 28 Python
python处理document文档保留原样式
Sep 23 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 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实现时间轴函数代码
2011/10/08 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
Python生成验证码实例
2014/08/21 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python中取整的几种方法小结
2017/01/06 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python属于解释语言吗
2020/06/11 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
C++的几个面试题附答案
2016/08/03 面试题
写出二分查找算法的两种实现
2013/05/13 面试题
什么是makefile? 如何编写makefile?
2012/08/08 面试题
护理职业应聘自荐书
2013/09/29 职场文书
家长给老师的道歉信
2014/01/13 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
我的长征观后感
2015/06/09 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Pytest中skip和skipif的具体使用方法
2021/06/30 Python