1. 问题描述
给定一个字符串和一个行数,表示按照zigzag的方式扫描的结果,编写算法输出按行扫描的结果。
2. 方法与思路
首先要先明白zigzag的顺序,
明白了zigzag扫描后,要确定zigzag中字符和按行扫描字符的对应关系。有两点:
1). 每行中的列元素都会有对应的间隔span =
2∗row−2
,例如行为4的zigzag扫描中,[1,7,13], [2,8,14]间隔为
2∗4−2=6
。
2). 中间行每一个span前还会有一个元素,间隔为
span−2∗rowi
。
class Solution {
public:
string convert(string s, int numRows) {
int i,j;
string str="";
if(s.length() == 0) return "";
if(numRows == 1) return s;
int span = 2*numRows-2;
for(int i = 0; i <numRows; i++)
{
j = i;
while(j < s.length())
{
str = str+s[j];
j += span;
if(i != 0 && i != numRows-1)
if(j-2*i < s.length()) str = str + s[j - 2*i];
} //cout<<"i:"<<i<<"str:"<<str<<endl;
}
return str;
}
};