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实现的选择排序算法原理与用法实例分析
Nov 22 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
linux中如何使用python3获取ip地址
Jul 15 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
python 6行代码制作月历生成器
Sep 18 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
提取视频中的音频 Python只需要三行代码!
May 10 Python
Python实现滑雪小游戏
Sep 25 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
php写app用的框架整理
2019/09/29 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
vue实现购物车列表
2020/06/30 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python 中split 和 strip的实例详解
2017/07/12 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
便利店投资的创业计划书
2014/01/12 职场文书
五年级科学教学反思
2014/02/05 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2015年统战工作总结
2015/05/19 职场文书
陪护人员误工证明
2015/06/24 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书