我の解
感觉就是找规律欸,虽然一开始我并没有看懂Z是个啥。与其说是Z,我觉得是个L变换。
如图所示,红色的为一组,利用numRows
可算出组的大小。
对于每一个s[i]计算它所在的行数,开一个vector<string>
数组,将s[i]加入str[行]。
最终将每一行加起来得到结果。
class Solution {
public:
string convert(string s, int numRows) {
if(numRows<=1) return s;
vector<string> str(numRows,"");
int part=numRows*2-2;
int index;
for(int i=0;i<s.length();i++)
{
if(i%part<numRows)
index=i%part;
else
index=numRows*2-i%part-2;
str[index]+=s[i];
}
for(int i=1;i<str.size();i++)
{
str[0]+=str[i];
}
return str[0];
}
};
参考题解
当字符填在0和n-1行时发生转折
class Solution {
public:
string convert(string s, int numRows) {
if(numRows<=1) return s;
vector<string> str(numRows,"");
bool godown=true;
int level=0;
for(int i=0;i<s.length();i++)
{
str[level]+=s[i];
level=godown?level+1:level-1;
if(level==0||level==numRows-1)
godown=!godown;
}
for(int i=1;i<str.size();i++)
{
str[0]+=str[i];
}
return str[0];
}
};