Leetcode concurrency #1114 Print in Order (in golang)
最近在點新技能,想把golang的技能樹點高點。看了些open source,也練習寫了些side project,但總是有點偏門;感覺有甚麼基本沒有掌握好,所以決定一天至少一題,來刷刷leetcode。
先從concurrency下手,因為golang的強項就是concurrency,之後有閒會再寫別種類型的題目。
先從題目解析開始。題目給得很簡單:有個class有三個method,分別會印出一二三,這三個method會根據使用者的輸入參數來決定跑起來的順序,但無論順序是甚麼,最後印出來的結果都要是一二三。
答案如下。再解題前有一個前提必須要先申明,leetcode目前沒有支援golang,所以沒有一個基本的程式框架可以擴展,所以答案內有些地方是硬湊的,例如:為什麼用struct?因為題目寫的是class所以不選interface;為什麼參數用function arguments而不是stdin?因為沒有框架,不知道要怎麼塞。另外,golang的struct不像是python的class有init,所以初始化的code直接寫在run裡。
解題思路是,反正二要等一,三要等二,那就直接起兩個unbuffered channel,在一做完後通知二,二做完通知三,這樣就完事了。答案寫得有點死,可以再改進,例如:不應該寫死channel,而應該用channel陣列,這樣可以透過index知道要等哪個和要通知哪個,但題目的function都寫死了,我想也不用over enginnering,直接定死吧。