LeetCode 6. Z字形變換
阿新 • • 發佈:2018-12-15
題目描述:
將字串 "PAYPALISHIRING"
以Z字形排列成給定的行數:
P A H N A P L S I I G Y I R
之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR"
實現一個將字串進行指定行數變換的函式:
string convert(string s, int numRows);
示例 1:
輸入: s = "PAYPALISHIRING", numRows = 3 輸出: "PAHNAPLSIIGYIR"
示例 2:
輸入: s = "PAYPALISHIRING", numRows = 4 輸出: "PINALSIGYAHRPI" 解釋:P I N A L S I G Y A H R P I
程式碼實現:
//逐行訪問 class Solution { public String convert(String s, int numRows) { if (numRows == 1) return s; StringBuilder ret = new StringBuilder(); int n = s.length(); int cycleLen = 2 * numRows - 2; for (int i = 0; i < numRows; i++) { for (int j = 0; j + i < n; j += cycleLen) { //同行 整週期的字元 ret.append(s.charAt(j + i)); if (i != 0 && i != numRows - 1 && j + cycleLen - i < n) { ret.append(s.charAt(j + cycleLen - i)); //同行兩個周 期中間的字元,由於第一行和最後一行不存在這樣的字元,所以要排除 } } } return ret.toString(); } }