将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
class Solution {
public:
string convert(string s, int numRows) {
string result="";
//如果排序长度为1,或者字符的长度小于z字形长度,就直接输出s
if(numRows==1||s.size()<=numRows)
return s;
//从第一行依次遍历到最后一行
for(int rows=0;rows<numRows;rows++)
{
//first为直列所在的字符串位置
int first=rows;
//second为斜线所在列的字符串的位置
int second=2*numRows-2-rows;
//判断直列是否存在
for(;first<s.size();)
{
//如果存在,就将first存在result中
result+=s[first];
//关键,判断是否斜列存在,行数为0或者为最后一行时不存在;并且判断位置是否大于字符串长度
if(rows!=0&&rows!=numRows-1&&second<s.size())
{
result+=s[second];
}
//下一个位置,每行一直一斜,依次下去
first+=2*numRows-2;
second+=2*numRows-2;
}
}
return result;
}
};