經過這幾篇的練習,我已經能熟悉用指標處理一維陣列和基本的 malloc 分配記憶體。今天挑戰的題目是 LeetCode 832 — Flipping an Image,這題可以進一步練習「指標的指標(int**)」與「二維陣列的動態配置」。它不僅要操作每列的元素,還要結合反轉與反相兩個動作,難度比前幾天的題目更上一層,但依舊清楚易懂,非常適合練習指標邏輯。
💡 題目說明
給定一個二維陣列 image,每一列代表一張圖片的像素,內容只有 0 與 1
要先將每一列水平反轉(像鏡子一樣),再將所有 0 變成 1、1 變成 0
例如:
輸入:[[1,1,0],[1,0,1],[0,0,0]]
輸出:[[1,0,0],[0,1,0],[1,1,1]]
🧠 解題思路
使用 int** 來存取二維陣列 透過 malloc 為每一列配置新的記憶體空間
在迴圈中同時進行兩個操作:
將每列反轉(imageColSize[i] - j - 1)、將元素反相(1 - 原值),最後回傳新的二維陣列
✨ 學習心得
這題讓我更深刻體會到「指標的威力」:
當 int* 可以指向一維陣列時,int** 就能靈活操作二維結構。寫的過程中我也注意到記憶體分配的邏輯——要先為列配置,再為欄配置,否則會出現段錯誤。雖然比前幾天多了一層複雜度,但正因為這樣,指標的概念變得更立體!