1,题目意思
这个题看了几分钟,还是没有理解题目意思.....(太菜了)
百度网上的相关教程,https://www.jianshu.com/p/8b83c6a2eff8(个人认为可以称得上很经典的教程了)
给定一个字符串,使之按照倒N字形排列,然后返回一个(按行)顺序读的字符串。
按照图中所示,我们目前拿数组下标来表示数据,而且整个题目都会以数组下标作为关键。那我们的核心就是创建一个String,直接从源字符串取数据进行append,像是一种没有进行zigzag排序,直接进行合理的字符串选取.
numRows = 4
0 --- 6 间隔6 (i = 0)
1 --- 5 间隔4 (i = 1)
2 --- 4 间隔2 (i = 2)
3 --- 3 间隔0 (i = 3)
即找规律:将N分为正v和倒v。(其中i为行数下标)
对于正v,间隔为2(numRows-i-1)(numRows>1)
对于倒v,间隔为2i
注意:每个字符只取一次,即当i=0和i=numRows-1时,仅需考虑取正v和倒v中的一个即可。
边界问题:
numRows <= 1的情况,直接返回
s.size()==0 ,直接返回
string convert(string s, int numRows) {
if (s.size() == 0 || numRows <= 1)
return s;
string s1 = "";
int index = 0;
for (int i = 0; i < numRows; i++) {
index = i;
while (index < s.size()) {
s1 += s[index];
index += 2 * (numRows - i - 1);
if (i!=0&&i!=numRows-1&&index < s.size())
{
s1 += s[index];
}
index += 2 * i;
}
}
return s1;
}