zoukankan      html  css  js  c++  java
  • 43. Multiply Strings 字符串相乘

    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. 思路

    leetcode解

    对于两个长为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]//10
    12                 res[i] = res[i]%10
    13         res =  ''.join([str(s) for s in res]).lstrip('0')   # 删掉开头的0
    14         if not res: return '0'    # 如果全0的话只返回"0"就好
    15         return res
  • 相关阅读:
    Codeforces Round #352 (Div. 1) B. Robin Hood (二分)
    Codeforces Round #209 (Div. 2) D. Pair of Numbers (模拟)
    Kattis
    kattis Curious Cupid (莫队算法)
    HYSBZ
    SPOJ NETADMIN
    day26-2 基于TCP协议的套接字编程
    day26-1 TCP三次握手和四次挥手
    day25-2 OSI协议和socket抽象层
    day25-1 网络架构与互联网组成
  • 原文地址:https://www.cnblogs.com/king-lps/p/10795199.html
Copyright © 2011-2022 走看看