Leetcode006-ZigZag Conversion
ZigZag转换
问题描述: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”.
什么是ZigZag?
ZigZag,意味锯齿形。ZigZag的转化方式如下:
解题思路
最简洁直观的想法,定义一个字符串数组,每一行定义一个字符串。再将字符串相接,即为结果。唯一需要注意的就是要计算当前字符属于哪一行(正向和反向两个方向)。
AC版本
class Solution {
public:
string convert(string s, int numRows) {
int n_state = 2 * numRows - 2;
// numRows为1时,n_state为0,直接返回s
if(!n_state)
return s;
string* s_array = new string[numRows];
string res = "";
int n = s.size();
for(int i=0; i<n; i++){
int state = i % n_state;
int row = 0;
// 计算当前字符属于哪一行
if(state >= numRows)
row = 2 * numRows - state - 2;
else
row = state;
s_array[row] += s[i];
}
for(int i=0; i<numRows; i++)
res += s_array[i];
return res;
}
};