原题链接:Leecode 6. Z 字形变换 代码一:
class Solution {
public:
vector<char> res[1010];
string convert(string s, int numRows) {
int type=1,num=1;
for(int i=0;i<s.size();i++)
{
if(type==1)
{
if(num==numRows)
{
res[num].push_back(s[i]);
type=2;num=(numRows-1>0)? numRows-1:1;
}
else
res[num++].push_back(s[i]);
}
else if(type==2)
{
if(num==1)
{
res[num].push_back(s[i]);
type=1;num=(num+1<numRows)? num+1:numRows;
}
else
res[num--].push_back(s[i]);
}
}
string ans;
for(int i=1;i<=numRows;i++)
{
for(int j=0;j<res[i].size();j++)
{
ans+=res[i][j];
}
}
return ans;
}
};
代码二(空间优化后):
class Solution {
public:
string convert(string s, int numRows) {
int type=1,num=1;
if(numRows==1 || numRows>=int(s.size()))
return s;
string ans;
vector<string> res(numRows+2);
for(int i=0;i<s.size();i++)
{
res[num] += s[i];
if(type==1)
{
if(num==numRows)
{ type=2;num=numRows-1; }
else
num++;
}
else if(type==2)
{
if(num==1)
{ type=1;num=num+1; }
else
num--;
}
}
for(auto &row: res)
ans+=row;
return ans;
}
};
|