100 道 Python 算法题及答案集合,拿去刷!

看书,看视频都可以帮助你学习代码,但都只是辅助作用,学好 Python,最重要的还是 多敲代码,多刷题

不知道怎么找题刷题的小伙伴,可以看看我们今天带来的《Python 百题大冲关》。覆盖了基本语法,数据结构,算法等多个方面,并附有答案。

100 道 Python 练习题,刷起来!!!

以下是前四道题目:

一、确定字符串是否包含唯一字符

题目介绍:

实现一个算法:识别一个字符串中,是否包含唯一的字符。

  • 如果字符串中的字符都是唯一的,则返回 True,如 ‘123’。
  • 如果字符串中的字符有重复,则返回 False,如 ‘1223’。

考核点:集合的用法:set()

解题思路:

看到这个题目,你的第一反应可能是:先把字符串中每个字符都拆分出来,放入一个列表,再统计列表中是否有数量为 1 的字符。但这么做不但费时,而且要循环多次,效率极低,有一个方法可以让你超过 99 % 的面试者:

记得 Python 的 Set (集合) 概念吗?在集合中,所有的元素都是唯一的。你可以使用 set() 方法将字符串、列表等任何「可迭代对象」转换为集合,转换后会删除重复的元素,继而长度会发生变化。

所以,我们只需要将字符串转换为集合,然后比较转换前后的长度即可,代码如下。

参考答案:

class UniqueChars(object):
    def has_unique_chars(self, string):
        if string is None:
            return False
        return len(set(string)) == len(string)

二、确定字符串是否是另一个的排列

题目介绍:

实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:

  • 如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。例如:123 是 321 的排列,abc 是 cba 的排列。
  • 如果 str2 字符串是 str1 字符串的排列,则返回 True;反之则返回 False;

考核点:sorted()方法

解题思路

一样是看起来复杂,但只需一行核心代码就能搞定的题目。在其他语言中,你可能要手动写一个排序算法,然后比较两个字符串排序后是否一样。但 Python 自带的 sorted() 方法,可以自动对所有可迭代的对象进行排序操作。

参考答案:

class Permutations(object):
    def is_permutation(self, str1, str2):
        if str1 is None or str2 is None:
            return False
        return sorted(str1) == sorted(str2)

附加知识点:

sort() 和 sorted() 的区别:sort() 应用在 list 列表中,而 sorted() 可以对所有可迭代的对象进行排序操作。

三、反转字符串中的字符

题目介绍:

实现一个算法来实现反转字符数组的功能。反转的要求如下:

  • 将字符数组的字符进行反转,例如 [‘b’, ’ ', ‘a’, ‘r’] 变成 [‘r’, ‘a’, ’ ', ‘b’]。
  • 将字符数组替换为反转后的数组。

考核点:使用 a,b = b,a 交换变量

解题思路

常规的解法是创建一个相同长度的新数组,然后把第一个数组中的元素,按倒序放入新数组中。但更简单的方法是:利用 Python 交换变量的特性,不需要新建数组,直接在原数组里即可完成,代码如下。

参考答案:

class ReverseString(object):
    def reverse(self, chars):
        if chars:
            size = len(chars)
            for i in range(size // 2):
                chars[i], chars[size - 1 - i] = \
                    chars[size - 1 - i], chars[i]
        return chars

四、Fizz Buzz 经典问题

题目介绍:

给定一个整数 num,从 1 到 num 按照下面的规则返回每个数:

  • 如果这个数被 3 整除,返回 ‘Fizz’。
  • 如果这个数被 5 整除,返回 ‘Buzz’。
  • 如果这个数能同时被 3 和 5 整除,返回 ‘FizzBuzz’。
  • 如果这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式。

考核点:Python 基础语法中的条件判断

解题思路

有趣又比较简单的一道题,写一个循环即可。当数字被 3 整除时返回 ‘Fizz’,被 5 整除,返回 ‘Buzz’,同时被 3 和 5 整除,返回 ‘FizzBuzz’……代码如下。

参考答案:

class Solution(object):
    def fizz_buzz(self, num):
        if num is None:
            raise TypeError('num cannot be None')
        if num < 1:
            raise ValueError('num cannot be less than one')
        results = []
        for i in range(1, num + 1):
            if i % 3 == 0 and i % 5 == 0:
                results.append('FizzBuzz')
            elif i % 3 == 0:
                results.append('Fizz')
            elif i % 5 == 0:
                results.append('Buzz')
            else:
                results.append(str(i))
        return results
篇幅有限,就不一一展示了,这份完整版的100 道 Python 算法题及答案集合学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值