将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N A P L S I I G Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4 输出: "PINALSIGYAHRPI" 解释: P I N A L S I G Y A H R P I
0 8 16
1 7 9 15 17
2 6 10 14 18
3 5 11 13 19
4 12 20
numsRows=5
第一行和最后一行
数的增量为0
0 0+8=8 8+8=16
4 4+8=12 12+8=20
中间行
1 1+8-2=7 1+8=9 9+8-2=15 9+8=17
2 2+8-4=6 2+8=10 10+8-4=14 10+8=18
3 3+8-6=5 3+8=11 11+8-6=13 11+8=19
以此类推
class Solution {
public:
string convert(string s, int numRows) {
int length=s.length();
string result;
if(length==0||numRows==0||numRows==1) return s;
int nodeLen=2*numRows-2;
for (int i = 0; i < numRows; i++)
for (int j = i; j < length; j += nodeLen)
{
result += s[j];
if (i != 0 && i != numRows-1 && j - 2*i + nodeLen < length)
result += s[j - 2*i + nodeLen];
}
return result;
}
};