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实现控制台输入密码的方法
May 29 Python
Python实现定时任务
Feb 08 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Python实现简繁体转换
Jun 07 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生成扭曲及旋转的验证码图片
2013/06/07 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
用Eclipse写python程序
2018/02/10 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
历史学专业个人的自我评价
2013/10/13 职场文书
出纳岗位职责
2013/11/09 职场文书
战友聚会邀请函
2014/01/18 职场文书
公司新年寄语
2014/04/04 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
担保贷款承诺书
2015/04/30 职场文书
八年级数学教学反思
2016/02/17 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
解决Redis启动警告问题
2022/02/24 Redis