题目链接如下:
解题思路
1、如果是一行的话,直接返回;
2、首先,初始化一个vector数组,大小设置为numRows,用于保存N字形变换后,每行的字符串;
3、down为vector数组向下和向上遍历的标志位,为true,数组索引值递增,false则递减;
4、遍历原字符串的同时,N字形变换的字符也依次存放到相应的vector容器中;
5、遍历vector容器,依次累加,即可得到N字形变换后的字符串;
代码如下
class Solution {
public:
string convert(string s, int numRows) {
//如果是一行的话,直接返回
if(numRows == 1)
{
return s;
}
//首先,初始化一个vector<string>数组,大小设置为numRows,用于保存N字形变换后,每行的字符串
vector<string> vecRet(numRows);
//down为vector数组向下和向上遍历的标志位,为true,数组索引值递增,false则递减
bool down = true;
//遍历原字符串的同时,N字形变换的字符也依次存放到相应的vector容器中
for(int i = 0, nRow = 0; i < s.size(); i++)
{
vecRet[nRow] += s[i];
if(down)
{
nRow++;
if(nRow == numRows - 1)
{
down = !down;
}
}
else
{
nRow--;
if(nRow == 0)
{
down = !down;
}
}
}
//遍历vector容器,依次累加,即可得到N字形变换后的字符串
string strRet = "";
for(int j = 0; j < vecRet.size(); ++j)
{
strRet += vecRet[j];
}
return strRet;
}
};