找规律的题目,题目的大意是给定一个字符串和行数,排列成锯齿形后逐行输出。比如“PAYPALISHIRING”输出之后应该是这样的:
P A H N A P L S I I G Y I R可以发现这样的规律:第一行和最后一行相邻两个字符之间的间隔是interval = (nRows - 1) * 2,中间行i(0 < i < nRows - 1)相邻两个字符之间的间隔有两种情况,分别是interval1 = interval - i * 2, interval2 = interval - interval1,并且这两种情况是交替进行的。Ok,举个例子,假设nRows = 3,即上面的例子,那么第一行相邻字符之间的间距是4,第二行A与P之间的字符间距是2 = 4 - 2 * 1(interval1 = interval - i * 2),P与L之间的字符间距是2 = 4 - 2(interval2 = interval - interval1)。
Code:
string convert(string s, int nRows) {
if (nRows == 1) return s;
if (s.length() <= nRows || s.length() <= 1) return s;
int interval = (nRows - 1) * 2;
string ret = "";
int len = s.length();
for (int i = 0; i < nRows; ++i){
int interval1 = interval - 2 * i;
if (i == 0 || i == nRows - 1){
ret += s[i];
int j = i + interval;
while (j < len){
ret += s[j];
j += interval;
}
}
else{
ret += s[i];
int j = i + interval1;
while (j < len){
ret += s[j];
interval1 = interval - interval1;
j += interval1;
}
}
}
return ret;
}