这道题其实貌似用二维数组做会更方便,但是没想到。。。。这道题显然是个string 的题,我的方法笨一点,但是好想
我的想法是:
1.这个斑马纹的写法其实有点像VVVVVV这个形状的写法,然后横着按行return出去
2.规律是,令行数为row,当row小于等于nRows的时候,每个数之箭的距离是2*(nRows - row),当row大于nRows的时候两个数的距离是2*(row-1)
3.当row为第一行或是最后一行的时候,都会出现一个间隔为2*nRows,一个间隔为0 的情况,我的方法是加一个判断变量k,让k跟随i,每当i发生变化,i如果变了,则肯定会和k不同,变化后,再使k=i,也就是当 最后一行或是第一行,会出现间隔为0的情况是,i+完还是本身,也就是和上个k相同了,则会判断出特殊情况,不做处理
4.小心各种特殊情况,比如nRow<=0或是string为空
class Solution {
public:
string convert(string s, int nRows) {
int row = 1;
if(s == "" ||nRows <=0) return "";
if(nRows == 1) return s;
string re = "";
while(row <= nRows){
int i = row;int k = 0;
while(i<=s.size()){
if(k!=i)
re += s[i-1];
k = i;
i +=(2*(nRows - row));
if(i>s.size()) break;
if(k!=i)
re += s[i-1];
k = i;
i +=2*(row-1);
}
row++;
}
return re;
}
};