6.Zigzag Conversion === ###### tags: `Medium`,`String` [6. Zigzag Conversion](https://leetcode.com/problems/zigzag-conversion/) ### 題目描述 The string `"PAYPALISHIRING"` is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) ``` P A H N A P L S I I G Y I R ``` And then read line by line: `"PAHNAPLSIIGYIR"` Write the code that will take a string and make this conversion given a number of rows: ``` string convert(string s, int numRows); ``` ### 範例 **Example 1:** ``` Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" ``` **Example 2:** ``` Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I ``` **Example 3:** ``` Input: s = "A", numRows = 1 Output: "A" ``` **Constraints**: * 1 <= `s.length` <= 1000 * `s` consists of English letters (lower-case and upper-case), `','` and `'.'`. * 1 <= `numRows` <= 1000 ### 解答 #### Python ```python= class Solution: def convert(self, s: str, numRows: int) -> str: if numRows == 1: return s buf = [] for _ in range(numRows): buf.append( [ 0 for _ in range(len(s))] ) row,col = 0, 0 direction = 'down' for c in s: #print(row,col,direction) buf[row][col] = c if row == numRows-1: direction = 'up' row, col = row-1, col+1 elif row == 0: direction = 'down' row, col = row+1, col else: if direction == 'down': row, col = row+1, col else: row, col = row-1, col+1 result = '' for i in range(numRows): for j in range(len(s)): #print(buf[i][j], end='') if buf[i][j] != 0: result += buf[i][j] #print('') return result ``` > [name=玉山] #### C++ ```cpp= class Solution { public: string convert(string s, int numRows) { if (numRows == 1) return s; string ans; int step = (numRows - 1) * 2; for (int i = 0; i < numRows; i++) { for (int j = 0; j < s.size(); j += step) { int left = j + i; int right = j + step - i; if (left < s.size()) ans += s[left]; if (right < s.size() && left < right && right < j + step) ans += s[right]; } } return ans; } }; ``` > [name=Yen-Chi Chen][time=Fri, Feb 3, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)