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 相关文章推荐
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
python登录豆瓣并发帖的方法
Jul 08 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
TensorFlow实现创建分类器
Feb 06 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
Python发展简史 Python来历
May 14 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
TensorFlow固化模型的实现操作
May 26 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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和ACCESS写聊天室(一)
2006/10/09 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php中switch语句用法详解
2015/08/17 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
python 提取文件的小程序
2009/07/29 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
python3获取当前目录的实现方法
2019/07/29 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
西式婚礼证婚词
2014/01/12 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
金融管理专业求职信
2014/07/10 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
python实现简单的三子棋游戏
2022/04/28 Python