题目
请你实现这个将字符串进行指定行数变换的函数:
1 | string convert(string s, int numRows); |
示例 1:
1 | 输入: s = "LEETCODEISHIRING", numRows = 3 |
示例 2:
1 | 输入: s = "LEETCODEISHIRING", numRows = 4 |
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)
1 | P A H N |
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
1 | string convert(string s, int numRows); |
Example 1:
1 | Input: s = "PAYPALISHIRING", numRows = 3 |
Example 2:
1 | Input: s = "PAYPALISHIRING", numRows = 4 |
解题方法
当字符串为空、numRows为1,字符串长度小于等于numRows时,直接返回字符串。
每(numRows-1) 2个字符是一个循环,以(numRows-1) 2为一个窗口,每次滑动(numRows-1) 2个字符。对每个窗口,除去第一行和最后一行,每行有两个字符,假设行数为i,每行第一个字符在原字符串中的位置关系不变,仍然是i;第二字符是对应原字符串的(numRows-1) 2 - i位置,即第一个字符的偏置为(numRows-1-i) * 2。为了保持结果字符顺序的正确性,所以按行数循环,窗口从字符串开头滑动到末尾,每次只处理一行的字符。所以滑动窗口循环了numRows次。
这段代码跑了13ms,超过了96.85%的Java提交。
1 | class Solution{ |