Python小白 Leetcode刷题历程 No.6-No.10 Z 字形变换、整数反转、字符串转换整数 (atoi)、回文数、正则表达式匹配(有题干 有代码 有思路心得)

Python小白 Leetcode刷题历程 No.6-No.10 Z 字形变换、整数反转、字符串转换整数 (atoi)、回文数、正则表达式匹配

写在前面:

作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,作为一个小白,实习也莫得路子,又不想白白耗费时间。于是选择了Leetcode这个平台来刷题库。编程我只学过基础的C语言,现在在自学Python,所以用Python3.8刷题库。现在我Python掌握的还不是很熟练,算法什么的也还没学,就先不考虑算法上的优化了,单纯以解题为目的,复杂程度什么的以后有时间再优化。计划顺序五个题写一篇日志,希望其他初学编程的人起到一些帮助,写算是对自己学习历程的一个见证了吧。

有一起刷LeetCode的可以关注我一下,我会一直发LeetCode题库Python3解法的,也可以一起探讨。

觉得有用的话可以点赞关注下哦,谢谢大家!
········································································································································································
题解框架:

    1.题目,难度
    2.题干,题目描述
    3.题解代码(Python3(不是Python,是Python3))
    4.或许有用的知识点(不一定有)
    5.解题思路
    6.优解代码及分析(当我发现有比我写的好很多的代码和思路我就会写在这里)

········································································································································································

No.6.Z 字形变换

难度:中等
题目描述:


在这里插入图片描述

题解代码(Python3.8)

class Solution(object):
    def convert(self, s, numRows):
        if numRows<2:
            return s 
        res=["" for i in range(numRows)]
        j,flag = 0,-1
        for ch in s:
            res[j] += ch
            if j == 0 or j == numRows-1 :
                flag=-flag
            j += flag
        return "".join(res)


解题思路:
这个题,其实就是输入一个字符串,再输入一个数字n,创建n个字符串,将输入的字符串中的字符,依次输入进str[1]到str[n]再倒着输入回str[1]如此反复,最后输出str[1]+str[2]+……+str[n]。
实际操作中,我们先通过res=["" for i in range(numRows)]创建n个字符串(“”是空str,[]是空list),再控制字符串循环输入到n个字符串中,最后用 return "".join(res)将n的字符串相连输出。

No.7.整数反转

难度:简单
题目描述:

在这里插入图片描述

题解代码(Python3.8)

class Solution(object):
    def reverse(self, x):
        flag=0
        if x<0:
            flag=1
            x=-x
        x=str(x)
        x=x[::-1]
        x=int(x)
        if flag == 1:
            x=-x
        if x<-2147483648 or x>2147483647:
            return 0
        return x
        

解题思路:
设置一个flag记录正负,先把x变为非负整数,将x转换为str形式,运用切片的操作将字符串反转,再还原成int形式,赋予正负号,判断是否满足条件输出即可。Python切片操作具体内容我在第9题‘或许有用的知识点’中写出。

No.8.字符串转换整数 (atoi)

难度:中等
题目描述:

在这里插入图片描述
在这里插入图片描述

题解代码(Python3.8)

class Solution(object):
    def myAtoi(self, s):
        flag=0
        l=len(s)
        for i in range(l):
            if  s[i]==' ' or s[i]=='+' or s[i]=='-':
                continue
            if  '0' <= s[i] <= '9':
                flag=1
                break
            else:
                break
        if flag ==1:
            flag1=0
            flag2=0
            for i in range(l):
                if not( '0' <= s[i] <= '9' ):                   #不是数字
                    if (s[i]=='+' or s[i]=='-')and(flag1==0):       #正负号
                        if flag2==1:
                            s=s[:i]
                            break    
                        flag1 =flag1+1
                        if (s[i+1]=='+' or s[i+1]=='-' or s[i+1]==' ')and(flag1==1):       
                            s=0
                            break
                        continue  
                    if (s[i]=='+' or s[i]=='-')and(flag1==1):       
                        s=s[:i]
                        break                     
                    else:                                           #空格
                        if flag2==1:
                            s=s[:i]
                            break
                else:                          #是数字
                    flag2=1                                 
            s=int(s)
            
            if -2147483648 <= s <= 2147483647:
                return s
            if s < -2147483648:
                return -2147483648
            if s > 2147483647:
                return 2147483647
        else:
            return 0
           

或许有用的知识点:
re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)
str.lstrip([chars])用于截掉字符串左边的所有chars,s.lstrip()是去掉s左边所有的空格,
因此re.findall()中返回一个list其中包含所有能findout的元素,显然,本处list只有一个元素,
我们用
re.findall()对这个list拆包,得到这个list中唯一的元素,再转换成int形式,
其他的根据下图都很容易明白。
*

在这里插入图片描述

解题思路:
这个题真的是烦死我我了,要考虑的情况太多了,经常有答案不通过才发现题干隐藏这别的要求。我用的是for循环遍历判断的方法,十分麻烦,这个题用Python的话强推正则表达式,一行,就一行,就解决了我麻烦了我半个钟头的题,python的正则表达相关内容我在本题‘或许有用的知识点’中写出。

优解代码及分析:
优解代码(Python3.8)

class Solution:
    def myAtoi(self, str: str) -> int:
        return min(max(-(2**31),int(*re.findall('^[\+\-]?\d+',str.lstrip()))),2**31-1) 
            ## min max 的判断;  由一个+-和多个数字组成; 消除前端空格

分析:
运用了正则表达式,python的正则表达相关内容我在本题‘或许有用的知识点’中写出。

No.9.回文数

难度:简单
题目描述:

在这里插入图片描述

题解代码(Python3.8)

class Solution(object):
    def isPalindrome(self, x):
        x=str(x)
        return x == x[::-1]
        

或许有用的知识点:
切片操作:通常一个切片操作要提供三个参数 [start_index: stop_index: step] :
start_index是切片的起始位置
stop_index是切片的结束位置(不包括)
step可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。

在这里插入图片描述

解题思路:
这道题就体现Python切片功能的强大了,先把int型的x转换为str型,然后对x反向切片看与原来x是否相等,返回判断的布尔值。

No.10.正则表达式匹配

难度:困难
题目描述:

在这里插入图片描述
在这里插入图片描述

题解代码(Python3.8)

class Solution(object):
    def isMatch(self, s, p):
        return True if re.match('^'+str(p)+'$',s) else False
        

题解思路:
这题我偷懒了,如果想锻炼算法的话应该用动态规划慢慢做。我是想着正好再前几个题中学到了Python的正则表达式,就在这里用了一下,算是偷懒了。python的正则表达相关内容我在第8题‘或许有用的知识点’中写出。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容