前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串相乘与反转(15)

字符串相乘与反转(15)

作者头像
公众号guangcity
发布2019-09-20 11:39:34
3900
发布2019-09-20 11:39:34
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

字符串相乘与反转(15)

0.前言1.字符串相乘2.反转字符串3.作者的话

0.前言

周五到了,我们LeetCode刷题继续。

首先来共勉一句话:Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .来自老表!

LeetCode终于坚持下来了,第15篇

今日讨论:字符串相乘反转字符串

在这里我们一起坚持,点击公众号右下角->联系我可以进入leetcode微信群哦!备注:刷题

1.字符串相乘

问题

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

代码语言:javascript
复制
输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

代码语言:javascript
复制
输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1num2 的长度小于110。
  2. num1num2 只包含数字 0-9
  3. num1num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理

思路与代码结合

(1)首先计算两个数的长度分别用常量存储;

(2)若当前两个数字有一个为0或者为空字符,直接返回字符'0';

(3)开辟一个数组空间,用于存放两个数相乘的结果;

我们知道两个数相乘,数字的长度不大于两数长度之和!

(4)两重for循环,用于乘法的核心操作;

假设现在有两个数,num1="48",num2='"17"

代码语言:javascript
复制
    4 8 
    1 7
---------
0 0 0 0 
0 0 5 6
0 3 3 6
--------
0 0 8 0
0 4 8 0
--------
0 8 1 6

如上表:就是我们乘法的基本运算过程:

s1_len-i-1s2_len-j-1目的是从后面往前运算。

而low与hight分别代表低位与高位,这里的低位指的是被保留的数,高位指的是进位数!

然后不断更新对应位置的值,最终得到了一个[0,8,1,6]的数组,然后我们需要进一步做的就是后续处理!

后续处理:后面两层for循环,实现去除0以及转字符串,最终返回结果!

代码语言:javascript
复制
class Solution:
    def multiply(self, num1, num2):
        s1_len = len(num1)
        s2_len = len(num2)
        if s1_len == 0 or s2_len == 0 or num1 == '0' or num2 == '0':
            return '0'
        res_list = [0 for i in range(s1_len+s2_len)]
        for i in range(s1_len):
            for j in range(s2_len):
                muti_num = int(num1[s1_len-i-1])*int(num2[s2_len-j-1])
                low = s1_len+s2_len-i-j-1
                print("----")
                print(low)
                high = s1_len+s2_len-i-j-2
                print(high)
                muti_num += res_list[low]
                res_list[low]=muti_num%10
                res_list[high]+=muti_num//10
        print(res_list)
        str_res = ''
        for i in range(len(res_list)):
            if res_list[i] != 0:
                for j in res_list[i:]:
                    str_res += str(j)
                return str_res

运行

2.反转字符串

问题

编写一个函数,其作用是将输入的字符串反转过来。

示例 1:

代码语言:javascript
复制
输入: "hello"
输出: "olleh"

示例 2:

代码语言:javascript
复制
输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"

这里给出三种方法!

第一种:直接法

代码语言:javascript
复制
class Solution:
    def reverseString(self, s):
        return s[::-1]

第二种:插补法(自己起的名字)

一层循环,倒着取出字符,记得从index=1开始,最后在加第一位字符!

代码语言:javascript
复制
class Solution:
    def reverseString(self, s):
        if not s:
            return s
        new_str = ''
        for i in range(1,len(s)):
            new_str+=s[-i]
        new_str += s[0]
        return new_str

第三种:头尾颠倒法(自己起的名字)

代码语言:javascript
复制
class Solution:
    def reverseString(self, s):
        t = list(s)
        i=0
        j=len(s)-1
        while i<j:
            temp = t[i]
            t[i]=t[j]
            t[j]=temp
            i+=1
            j-=1
        return ''.join(t)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串相乘与反转(15)
    • 0.前言
      • 1.字符串相乘
        • 2.反转字符串
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档