200道大数据面试常考Leetcode算法题06-10(python带代码解析)

往期内容在这里:

往期01-05

大家好,继续为大家推荐200道大数据面试常考Leetcode算法题,附带解析,都是从Leetcode官网总结大神们的解法(在这里感谢大神的帮助,我只是个搬运工!)每篇更新5篇,艾瑞巴迪和我一起刷起来!!

200道大数据面试常考Leetcode算法题06-Z字形变换 

Leetcode原题为

题解为:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        n = numRows * 2 - 2  # 判断z字形循环的周期规律为:行数*2减去头尾两个
        if numRows < 2:  # 判断给出的z字形行数小于2时,z字形无法成型
            return s   # 返回原数组,做安全容错处理
        result = [""]*numRows  # 用一个["","",""]装纳每行的数据,这里是三行
        for i, char in enumerate(s):  # 循环每个索引跟值
            index = i % n     # 当前字符的索引整除周期的值
            x = min(index, n - index)  # 找出最小的值,周期有峰值
            result[x] += char   # 把当前的最小的索引值为行号,然后把当前值添加到当前索引行
        return "".join(result)  # 最后3行字符拼接在一起

200道大数据面试常考Leetcode算法题07-整数反转

 Leetcode原题:

题解为:

class Solution:
    def reverse(self, x: int) -> int:
        # 判断对正数反转时
        if x>=0:
            # 整型变成字符串用切片,-1表示反转
            ans=int(str(x)[::-1])
        else:
            # 假如是负数的时候则先变为负整数,然后在反转
            ans=-int(str(-x)[::-1])
        # 判断反转后的数符合32位范围
        if -2**31<=ans<=2**31-1:
            return ans
        return 0

200道大数据面试常考Leetcode算法题08-字符串转换整数 (atoi)

Leetcode原题:

题解为:

import re
class Solution:
    def myAtoi(self, str: str) -> int:
        INT_MAX = 2147483647    
        INT_MIN = -2147483648
        str = str.lstrip()      #清除左边多余的空格
        num_re = re.compile(r'^[\+\-]?\d+')   #设置正则规则
        num = num_re.findall(str)   #查找匹配的内容
        num = int(*num) #由于返回的是个列表,解包并且转换成整数
        return max(min(num,INT_MAX),INT_MIN)    #返回值

200道大数据面试常考Leetcode算法题09-回文数

Leetcode原题:

题解为: 

class Solution:
    def isPalindrome(self, x: int) -> bool:
        # 判断对正数反转时
        if x>=0:
            # 整型变成字符串用切片,-1表示反转
            ans=int(str(x)[::-1])
            # 直接反转对比是否等于原数
            if ans == x:
                return True
        # 其他情况一律不符合
        return False

200道大数据面试常考Leetcode算法题10-正则表达式匹配

Leetcode原题为:

 题解为:

class Solution(object):
    def isMatch(self, s, p) -> bool:
        if not s and not p:
            return True
        if len(s) > 0 and not p:
            return False
        # 当模式中的第二个字符是“*”时:
        if len(p) > 1 and p[1] == '*':
            # 如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式:
            if len(s) > 0 and (s[0] == p[0] or p[0] == '.'):
                # 1、模式后移2字符,相当于x*被忽略;
                # 2、字符串后移1字符,模式后移2字符; 
                # 3、字符串后移1字符,模式不变,即继续匹配字符下一位,因为*可以匹配多位;
                return self.isMatch(s[:], p[2:]) or self.isMatch(s[1:], p[2:]) or self.isMatch(s[1:], p[:])
            # 如果字符串第一个字符跟模式第一个字符不匹配
            else:
                # 模式后移2个字符,继续匹配。
                return self.isMatch(s, p[2:])
        # 当模式中的第二个字符不是“*”跟第一个字符和模式中的第一个字符相匹配时:
        if len(s) > 0 and (p[0] == s[0] or p[0] == '.'):
            # 那么字符串和模式都后移一个字符,然后匹配剩余的。
            return self.isMatch(s[1:], p[1:])
        # 如果字符串第一个字符和模式中的第一个字符相不匹配,直接返回false。
        return False

好啦,这期的分享到这里结束啦!我们下期再见!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条小海龟

谢谢你的打赏,微臣会好好努力达

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值