[Leetcode] 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 text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
注意如果用push_back的话会超内存,因为每次push_back后如果空间不够则新空间会是原来的两倍,为了避免这种情况还是直接定义长度为len的字符串吧。题目根本就没说清楚嘛, 下面是n=4时的结果:
P I N A L S I G Y A H R
P I
1 class Solution { 2 public: 3 string convert(string s, int nRows) { 4 int len = s.length(); 5 if (len <= nRows || nRows == 1) return s; 6 int steps; 7 string res; 8 res.resize(len); 9 int idx = 0; 10 for (int i = 0; i < nRows; ++i) { 11 if (i == nRows - 1) steps = 2 * (nRows - 1); 12 else steps = 2 * (nRows - i - 1); 13 14 if (i == 0 || i == nRows - 1) { 15 for (int j = i; j < len; j += steps) { 16 res[idx] = s[j]; 17 ++idx; 18 } 19 } else { 20 bool flag = true; 21 for (int j = i; j < len;) { 22 res[idx] = s[j]; 23 ++idx; 24 if (flag) j += steps; 25 else j += (2 * (nRows - 1) - steps); 26 flag = !flag; 27 } 28 } 29 } 30 return res; 31 } 32 };