在練習這幾題的過程中,我感覺自己就像是在演算法世界裡旅行,每一題都代表著不同的地形,需要不同的思維方式去探索。從字串、數列、鏈結串列到回溯,這些題目不僅讓我增加了熟悉度,也逐漸建立起「遇到問題時該怎麼思考」的模式。
Longest Common Prefix 看似簡單,但它提醒我細節決定一切。雖然只是找共同前綴,卻需要耐心逐字比對,也讓我認識到「暴力法」與「排序優化」的差異。接著在 Zigzag Conversion 裡,規律的觀察與索引的計算成為關鍵,讓我體會到演算法很多時候不是單純寫迴圈,而是去發現隱藏的數學規則。
Letter Combinations of a Phone Number 則讓我第一次明確接觸「回溯法」。一開始覺得它抽象、像在不斷試錯,但當我抓到「選擇—遞迴—回溯」這樣的結構之後,才真正理解回溯的魅力。後來做 Combination Sum 和 Combination Sum II 的時候,我更能套用這樣的模式,逐步建立出「探索所有可能解」的系統性思維。這種能力不只是解這些題目有用,未來遇到其他組合或排列問題,也能舉一反三。
Next Permutation 是一題我覺得很有啟發性的題目。它讓我明白數列操作不只是單純排列,而是透過找臨界點、交換與反轉,讓數列往下一個「最接近的更大值」邁進。這讓我更有系統地去看待數列題,學會如何在複雜問題中找到「可以被局部調整的地方」。
最後的 Remove Nth Node From End of List,讓我把注意力放在資料結構上。透過雙指針技巧,我體驗到「效率」的重要性,也讓我感受到鏈結串列題目雖然看似麻煩,但只要用對方法,就能簡化流程。這題讓我對鏈結串列的操作更加熟悉,也學到該如何結合資料結構與演算法思維。
回顧這幾題,我不只是單純完成程式碼,而是逐步學會了三件重要的事情:
1.觀察規律 —— 演算法的本質是找到規律並加以利用。
2.建立框架 —— 特別是回溯題,讓我知道很多題目其實背後有共通的解題流程。
3.善用資料結構 —— 不論是鏈結串列的雙指針,或是數列的操作,都需要選對工具,才能讓解法高效。
雖然過程中也遇到卡關和挫折,但正因如此,當我真正解出來時,成就感也特別強烈。這些題目就像是在幫我建構「解題思維的骨架」,未來不論題目再怎麼變化,我都能更有自信去嘗試。