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单元测试框架unittest简明使用实例
Apr 13 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
django2.0扩展用户字段示例
Feb 13 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
基于Django统计博客文章阅读量
Oct 29 Python
python2 对excel表格操作完整示例
Feb 23 Python
python 的topk算法实例
Apr 02 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
Python自动化测试中yaml文件读取操作
Aug 20 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/01/23 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
PHP实现百度人脸识别
2019/05/06 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python  logging日志打印过程解析
2019/10/22 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
质检员岗位职责
2013/12/17 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
公司周年庆寄语
2019/06/21 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS