2024年4月7日 星期日

leetcode 的問題

 感謝SAM老師分享圖解教學,也用aiot帳號的COLAB去leetcode練習看看。若有問題就會寫下來。可以點選submissions,然後看到自己回答的題目,點Accepted→點選黃色的圖表,就可以看到其他神人的解答@@


1249. Minimum Remove to Make Valid Parenth
字串無法直接更換之中的值,,必須要轉成陣列後 for i in range(len(s)): s[i] = '*' 
(陣列用for x in s 也無法更換之中的值) 這題比較麻煩的是,
錯一,不只右括號多的要刪掉,左括號多的也要刪掉。"(a(b(c)d)" 答案是 "a(b(c)d)" 原本是數數量,但遇到"a)b(c)d",答案是"ab(c)d",這樣會先刪除後面的右括號。 list要從後面取 n 個,for i in range(len(s2)-1,len(s2)-1-n,-1): 錯二,竟然還有這種情況,"())()(((",答案是"()()",最後全部打掉重想@@所以應該要思考當右括號先出現就刪除,左括號遇到右括號時,這個就配對成功。

383. Ransom Note
測試RUN答案是通過的,但SUBMIT卻是失敗的
錯一,原因在若s1='aab',s2='baa'答案要回傳true。
若s1='aa',s2='ab' 回傳False。
string只能用replace來刪除相同的字,但replace會全部刪除,所以當第一個遇到時,會將後面的全部刪除。
所以將s2改成list,搭配pop(第n個),可以單獨刪除第n個。時間跑很後面@@
神人是將s1變成set(不會重複字母),然後去count(字串竟然可以count)

 876. Middle of The Linked List 
這題是Link List(第一次遇到),跟一般的陣列不同,沒有len可以看長度,
Linked List只有兩個方法,一個是val(紀錄值),一個是next(記錄下一個位置)。感謝Qoo分享python做法。(Js做法台部落分享的)
感謝hungen分享876解法(有厲害,利用慢的走一步,快的走兩步,來找出中間值。但註解好像有點問題(要再看一下colab),還是題目有問題,到底是要回傳中間值,還是要回傳從中間值到最後的nodeList呢???)
最後解法,要利用tmp,一開始建立一個中間值Node,next指向後面的NODE(要再建立一個NODE2),這時tmp就要變成NODE2,再由NODE2去接next。
看其他人解答發現,為什麼他們只要用慢快就可以回傳慢的呢???這樣不是只有回傳前半段嗎??原來是找到中間值,就可以找到之後所有的值。害我想了很久,用上面的tmp來重新建立NODE。

412. Fizz Buzz
一開始看不懂,轉成中文也看不懂,後來才慢慢了解,輸入一個數字假設是6,要列出 1~6的字串陣列,但遇到3的時候要改列出"Fizz",遇到5的時候,要改列出"Buzz",若是3、5的倍數就列出"FizzBuzz"。

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。