412. Fizz Buzz and 463. Island Perimeter

主要寫寫這兩個問題在Solutions里的one line python的解法,題目本身都很容易。

  1. Fizz Buzz
def fizzBuzz(self, n):
    return ['Fizz' * (not i % 3) + 'Buzz' * (not i % 5) or str(i) for i in range(1, n+1)]

這個問題有兩個特別的語法點,一個是or除了邏輯運算符的功能外,還有一個語義是返回第一個非空對象,第二個是字符串也可以用乘法(以前只知道加法。。。)

  1. Island Perimeter
def islandPerimeter(self, grid):
    return sum(sum(map(operator.ne, [0] + row, row + [0]))
               for row in grid + map(list, zip(*grid)))

這個onelinepython著實讓我想了一陣子。。。。前一個不明白的點就是map(operator.ne, [0] + row, row + [0]),后來通過各種實驗和打印數據,發現這句話就是讓每個grid中的row去和自己的后一位(或者理解成前一位也沒問題)去做異或,然后第一位和最后一位和0做異或,之后sum起來,就是邊的長度了。

再有一個點是for row in grid + map(list, zip(grid),后面的map(list, zip(grid)我在查了zip的用法之后發現,這里就是把整個grid翻轉map之后返回的就是個完全轉秩的grid,然后這里for循環的row其實就是col了(當然前面的那個in grid中取得還是row)。

真的是,很簡潔的寫法,但是工程中(工作的時候)我是絕對不會這么寫的,雖然看起來很cooooooool!但是少寫10幾行代碼的代價就是后人理解起來要花費10倍的時間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,768評論 0 33
  • 從泰國回來已經快3個月了,這三個月里我好像一直處于一種奔波操心的狀態。剛回到學校時忙著辦手續、找宿舍,手續雜七雜八...
    小雨轉晴閱讀 238評論 0 1
  • 3 然后我趕緊把煎餅收起來我心里想我去為什么是我但是我心里還是很開心的因為是和王俊凱然后...
    王俊熙閱讀 432評論 0 0
  • 文/木楊夏子 燁燁星空 閃閃星辰 遙望北極星空,那里有我的一個夢。 那一年,我的青春正好。感激歲月,感懷讓我遇到的...
    木楊夏子閱讀 109評論 0 2
  • 臘月二十七,我居然一整天呆在房間,沒有下樓,也沒有吃飯。 晚上感覺肚子好餓,下樓洗澡,才發現爸爸還在弄柑果,沒有睡...
    小珍君閱讀 175評論 0 1