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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
python字符串连接方法分析
Apr 12 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
Python实现Event回调机制的方法
Feb 13 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
Python如何定义接口和抽象类
Jul 28 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Python OpenCV超详细讲解基本功能
Apr 02 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 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加密技术的简单实现
2016/09/04 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python dataframe NaN处理方式
2019/12/26 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
物理力学求职信
2014/02/18 职场文书
创业大赛策划书
2014/03/01 职场文书
单位考核聘任报告
2015/03/02 职场文书
自主招生自荐信范文
2015/03/04 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
婚姻出轨保证书
2015/05/08 职场文书
卡特教练观后感
2015/06/08 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL