100 道 Python 算法題及答案集合,拿去刷! - 知乎

https://zhuanlan.zhihu.com/p/112165822python


看書,看視頻均可以幫助你學習代碼,但都只是輔助做用,學好 Python,最重要的仍是 多敲代碼,多刷題面試

不知道怎麼找題刷題的小夥伴,能夠看看咱們今天帶來的《Python 百題大沖關》覆蓋了基本語法,數據結構,算法等多個方面,並附有答案。算法

100 道 Python 練習題,刷起來!!!數組

Python 百題大沖關www.shiyanlou.com圖標

如下是前四道題目:數據結構

1、肯定字符串是否包含惟一字符

題目介紹:app

實現一個算法:識別一個字符串中,是否包含惟一的字符。less

  • 若是字符串中的字符都是惟一的,則返回 True,如 '123'。
  • 若是字符串中的字符有重複,則返回 False,如 '1223'。

考覈點:集合的用法:set()學習

解題思路:flex

看到這個題目,你的第一反應多是:先把字符串中每一個字符都拆分出來,放入一個列表,再統計列表中是否有數量爲 1 的字符。但這麼作不但費時,並且要循環屢次,效率極低,有一個方法可讓你超過 99 % 的面試者:url

記得 Python 的 Set (集合) 概念嗎?在集合中,全部的元素都是惟一的。你能夠使用 set() 方法將字符串、列表等任何「可迭代對象」轉換爲集合,轉換後會刪除重複的元素,繼而長度會發生變化。

因此,咱們只須要將字符串轉換爲集合,而後比較轉換先後的長度便可,代碼以下。

參考答案:

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

2、肯定字符串是不是另外一個的排列

題目介紹:

實現一個算法來識別一個字符串 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() 能夠對全部可迭代的對象進行排序操做。

3、反轉字符串中的字符

題目介紹:

實現一個算法來實現反轉字符數組的功能。反轉的要求以下:

  • 將字符數組的字符進行反轉,例如 ['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

4、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


更多題目,歡迎進入課程學習~

如何免費學習:新註冊實驗樓,會贈送 10 元訓練營代金券,而後在支付時使用代金券,便可免費學習該課程。

Python 百題大沖關www.shiyanlou.com圖標
相關文章
相關標籤/搜索