思路 - 找规律
- 找规律题
每一行都是等差数列
样例
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
解释:
P A H N
A P L S I I G
Y I R
第一行和最后一行字符间的距离是2*numRows - 2
中间几行:
-
先除去斜线上的字符,字符间距离也是
2*numRows - 2
-
第i行对应的斜线字符起点是
2*numRows-2-i
,斜线上字符间距也是2*numRows - 2
, -
numRows = 1时\((2*n)-2 = 0\), 会进入死循环, 因此需要特判
class Solution {
public:
string convert(string s, int n)
{
if(n == 1) return s;
string res;
int size = s.size();
for(int i = 0; i < n; i++)
{
if(i == 0 || i == n - 1)
{
for(int j = i; j < size; j += 2 * n - 2)
res += s[j];
}
else
{
for(int j = i, k = 2 * n - 2 - i; j < size || k < size; j += 2 * n - 2 , k += 2 * n - 2)
{
if(j < size) res += s[j];
if(k < size) res += s[k];
}
}
}
return res;
}
};
标签:字符,字形,变换,res,numRows,int,string,size
From: https://www.cnblogs.com/INnoVationv2/p/16869455.html