博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
43. Multiply Strings 字符串相乘
阅读量:4957 次
发布时间:2019-06-12

本文共 1241 字,大约阅读时间需要 4 分钟。

1. 原始题目

给定两个以字符串形式表示的非负整数 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 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
 

2. 思路

对于两个长为num1和num2的整数相乘,结果最长为num1+num2,所以先初始化这样长的一个数组。然后可以看到建立两个循环来存放每个索引的结果,当前的两个数字相乘后会在数组的两个位置产生结果。即商和余数。依次便利即可。存放完成后再对数组进行一边处理,因为有的位置可能>9,需要再进位至前一位。如果开头是0的话要删除。如果全0数组只返回”0“即可。

 

3. 实现

1 class Solution: 2     def multiply(self, num1: str, num2: str) -> str: 3         res = [0]*(len(num1)+len(num2)) 4         for i in range(len(num1)-1, -1, -1):   # 2,1,0 5             for j in range(len(num2)-1, -1, -1):   # 1,0 6                 temp = int(num1[i])*int(num2[j]) 7                 res[i+j+1] += temp%10       # 更新第一个索引位置 8                 res[i+j] += temp // 10      # 更新第二个索引位置 9         for i in range(len(res)-1,-1,-1):   # 将数组在遍历一遍更新>9的数,进位10             if res[i]>9:11                 res[i-1]+=res[i]//1012                 res[i] = res[i]%1013         res =  ''.join([str(s) for s in res]).lstrip('0')   # 删掉开头的014         if not res: return '0'    # 如果全0的话只返回"0"就好15         return res

 

转载于:https://www.cnblogs.com/king-lps/p/10795199.html

你可能感兴趣的文章
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>