思路:
找出z字的規律。以每乙個z字的「 | 」 和" / " 作為一組,進行分組,每組有 2 * numrows - 2 個字元。
例:「leetcodeishiring"
行數為 3
l c i r l c" | " 的部分大小為 numrows,「 / 」的部分大小為 2 * numrows - 2 - numrows = numrows - 2;e t o e s i i g 以 e t 為一組, o e 為一組。
e d h n e d
「 / 」 部分的初始間隔為 2 * numrows - 2 - 2,此後需要更新。
" | " 部分的順序在原始字串中為從前到後,「 / "部分的順序在原始字串中為從後到前
例如:「leetcodeishiring"
行數為 4
對於中間部分,先是 o i 再是 c h。
首行和最後一行不需要加中間部分,直接新增即可,中間部分從後往前遍歷,其他部分從前往後遍歷。
詳細處理步驟,請看**。
public string convert(string s, int numrows)
stringbuilder sb = new stringbuilder();
int index = 0;
int jump = numrows * 2 - 2;
int len = s.length();
int mid = numrows - 2; // 中間部分的字元數
int midjump = jump - 2; // 中間部分的跳轉數
for (int i = 0; i < numrows; i++)
} else
}midjump -= 2; // 中間位置每次都是逆序新增,
// 故一次新增後,需要減2
// (由於index會加1,中間位置需要減1,裡外裡減2)
mid--; // 中間部分還剩幾個字元}}
return sb.tostring();
}
LeetCode 6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 輸入 s pa...
leetcode 6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 示例 1 輸入...
LeetCode 6 Z字形變換
把整個問題拆解為 儲存 取 的兩個過程 通過觀察我發現的是,當numrows為3時,兩列之間的數字的數目為1 當numrows為4時,兩列之間的數字的數目為2,以此類推。那麼,可不可以將每一列都存起來 col 兩列之間的數字也存起來 gap 最後要輸出時再通過遍歷的方式拼接出結果呢?以題目中給的字串...