题目
思路
定义numRows
大小的vector
容器来存Z字形排列的字符。比对输入输出,忽略空格,可以发现规律,拿出2*numRows-1
个字符来看如下图,就是一种迂回读取。先按行升序读取到对应行,然后再反过来降序读取到对应行,一直这样重复即可。
注意两种特殊情况:字符串尺寸小于numRows
和numRows=1
时,直接返回字符串。
代码
class Solution {
public:
string convert(string s, int numRows) {
int n = s.size();
if(n<numRows||numRows==1)
return s;
vector<string> zscan(numRows);
string result;
int j=0;
bool dir = true;
for(int i=0;i<n;i++)
{
zscan[j].push_back(s[i]);
if(dir)
j++;
else
j--;
if((j==numRows-1)||(j==0))
dir = !dir;
}
for(int i=0;i<numRows;i++)
result.insert(result.end(),zscan[i].begin(),zscan[i].end());
return result;
}
};