属于模拟过程类型的题目,和之前做的CCF认证题目碰撞的小球比较像,同样设定了一个变量来模拟方向。d=1表示向下,d=-1表示向上。
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1)//如果给定行数为1则直接返回
return s;
int len=s.length();
vector<string> c(min(len,numRows));
int rows=0;
int d=-1;//1代表向下,-1代表向上
for(int i=0;i<len;i++)
{
c[rows]+=s[i];
if(rows==0||rows==numRows-1)//行数到头改变方向
d=-d;
if(d==1)
rows++;
else
rows--;
}
string tmp="";
for(int i=0;i<min(len,numRows);i++)
tmp=tmp+c[i];//回收字符串
return tmp;
}
};