nRows = 2
0 2 4 6 8
1 3 5 7 9
nRows = 3
0 4 8 12 16
1 3 5 7 9 11 13 15
2 6 10 14
nRows = 4
0 6 12 18
1 5 7 11 13 17 19
2 4 8 10 14 16
3 9 15
可以发现规律
-
一块区域,即一个类似于“v”的形状为一个区域,区域的size是nRows*2-2;
-
在每一个区域中,只有第一行和最后一行有一个数,其余行每行包含两个数;
-
在除第一行和最后一行的其余行,第二个数和第一个数的差距是size-i*2。
上代码
class Solution {
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (nRows <= 1)
return s;
int zigSize = nRows * 2 - 2;
string rst = "";
for (int i = 0; i < nRows; i++)
{
for (int j = i; j < s.length(); j += zigSize)
{
rst += s[j];
if (i > 0 && i < nRows - 1)
{
if (j+zigSize-2*i < s.length())
rst += s[j+zigSize-2*i];
}
}
}
return rst;
}
};
原文链接: https://www.cnblogs.com/dollarzhaole/p/3207591.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/96831
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!