题目大意:给出一个字符串和行号,其实按ZigZag模式排列的输出其转化后的排列方式。
ZigZag的排列规律:
算法思想:
设置一个string[rowNums]数组,和一个方向标记,通过方向标记将字符串写入string[rownums]中,然后将其拼接起来即是转换结果。方向分为向下和向上,向下时按行号递增的方式填写数组触碰到边界改变方向,向上时按对角线规律填写数组,遇到上边界改变方向。
代码如下:
class Solution {
public:
string convert(string s, int numRows) {
if(numRows<=1) return s;
string res;
string subres[numRows];
int i=0,k=0;
bool isDown=true;
while(k<s.length()){
if(isDown){
subres[i].push_back(s[k++]);
if(i==numRows-1)
isDown=false;
else
++i;
}
else{
subres[--i].push_back(s[k++]);
if(i==0)
{
isDown=true;
++i;
}
}
}
for(i=0;i<numRows;++i)
res+=subres[i];
return res;
}
};