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中使用lambda高效操作列表的教程
Apr 24 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
Python基本socket通信控制操作示例
Jan 30 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
python通过实例讲解反射机制
Oct 17 Python
Python实现UDP程序通信过程图解
May 15 Python
python安装及变量名介绍详解
Dec 12 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 Python
给numpy.array增加维度的超简单方法
Jun 02 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网站在线人数统计
2008/04/09 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
服务质量承诺书
2014/03/27 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
西双版纳导游词
2015/02/03 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
植树节新闻稿
2015/07/17 职场文书
Python与C++中梯度方向直方图的实现
2022/03/17 Python