日期:2026年7月29日
LeetCode 題目連結:6. Zigzag Conversion
解題想法
中等難度題。題目給一個字串 $s$、列數 $numRows$,要找出共有 $numRows$ 列的之字形排列字串。我先用一個 $numRows$ 列的陣列儲存每一列的字串內容,最後再把陣列內容接成一個很長的字串後回傳,主要的工作是在計算目前這個字元應該填在陣列中的哪一列。
Python 程式碼
Runtime: 7 ms, beats 84.25%. Memory: 19.24 MB, beats 79.60%.
class Solution:
def convert(self, s: str, numRows: int) -> str:
# 特例,只有一列,直接輸出 s
if numRows == 1: return s
# 一般狀況
n = len(s) # 長度
grid = [""] * numRows # 儲存答案用的串列
r, d = 0, 0 # 目前所在的列,方向
for ch in s: # 依序讀取字元
grid[r] += ch # 加入字元 ch
if d == 0: # 向下移動
r += 1
if r == numRows - 1: d = 1 # 走到最下方,改成向上走
else: # 向上移動
r -= 1
if r == 0: d = 0 # 走到最上方,改成向下走
# 從 grid 讀取字串,組合成字串 t 再回傳
return "".join(grid)
C++ 程式碼
Runtime: 4 ms, beats 62.13%. Memory: 14.34 MB, beats 19.58%.
class Solution {
public:
string convert(string s, int numRows) {
// 特例,只有一列,直接輸出 s
if (numRows == 1) return s;
// 一般狀況
int n = (int)s.size(); // 長度
vector<string> grid (numRows); // 儲存答案用的陣列
int r = 0, d = 0; // 目前所在的列,方向
for(char ch : s) { // 依序讀取字元
grid[r] += ch; // 加入字元 ch
if (d == 0) { // 向下移動
r++;
if (r == numRows - 1) d = 1; // 走到最下方,改成向上走
} else { // 向上移動
r--;
if (r == 0) d = 0; // 走到最上方,改成向下走
}
}
// 從 grid 讀取字串,組合成字串 t 再回傳
string t;
for(auto g : grid) t += g;
return t;
}
};
沒有留言:
張貼留言