1. 程式人生 > >日常練習+討論:lintcode 9. Fizz Buzz 問題

日常練習+討論:lintcode 9. Fizz Buzz 問題

其實這個問題挺有名的,簡單概述一下就是3換成Fizz,5換成Buzz,公倍數就FizzBuzz。
我之前在leetcode上做題的時候也遇到了,但是因為感覺簡單,所以沒有在意。
今天…Cisse-away突然問我是否做了這道題,我還心想這麼簡單的題不應該有什麼蹊蹺啊,但是他想問的題怎麼可能簡單呢,
果然,他是看了lintcode網站上的挑戰,只用一個if來完成這個題,還說用python才能實現,順便給了我一個連結:

這個裡面是Fizz Buzz Bazz,分別對應3,5,7,用最短程式碼解決。
這個就很神奇了,其中的python程式碼:

[''.join([w+'zz'for n,w in
{3:'Fi',5:'Bu',7:'Ba'}.items()if x%n<1])or x for x in range(1,101)]

就這一行,講真,剛開始我是一點都看不懂的。但是我看他十分有興致,於是陪他開始研究這個“破”玩意。(令人瘋狂)
其中兩個列表生成式,一個列表是 if用來判斷整除,之後遍歷Dictionary來返回要顯示的文字,如果沒有滿足整除條件就會生成空列表,如果是非空的列表,再用join()函式連線成相應字串,最後再用or來判斷取字串還是數字組成最後的大列表。
其中items()函式用來返回遍歷Dictionary生成的元組。

之後寫lintcode上的原題:

題目:

給你一個整數n. 從 1 到 n 按照下面的規則列印每個數:
如果這個數被3整除,列印fizz.
如果這個數被5整除,列印buzz.
如果這個數能同時被3和5整除,列印fizz buzz.

樣例:

比如 n = 15, 返回一個字串陣列:

[
“1”, “2”, “fizz”,
“4”, “buzz”, “fizz”,
“7”, “8”, “fizz”,
“buzz”, “11”, “fizz”,
“13”, “14”, “fizz buzz”
]

下面上程式碼:

class Solution
:
""" @param: n: An integer @return: A list of strings. """ def fizzBuzz(self, n): # write your code here a = {3:'fi',5:'bu'} final = [' '.join([w+'zz'for n,w in a.items()if x%n<1]) or str(x) for x in range(1,n+1)] return final

這裡就用了上面連結的文章裡面的方法,用了一個if解決。
這裡要注意的點有兩個,lintcode上,輸出的兩個單詞是有空格的,所以是要用

' '.join()

是用空格連線。
還有一點就是,返回的list中,元素都是字串,所以要用

... or str(x) for x in range(1,n+1)

把數字轉化成字串,這樣才能通過,我因為這個錯誤了一次。

大概就是這樣,不用一個if的話,就簡單一些了。
大佬的力量是偉大的。