leetcode C++ 6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
一、思路:
对于Z字型的第i行数据为:let temp1=(row-i-1)*2 temp2=i*2
i i+temp1 i+temp1+temp2 1+temp1*2+temp2 1+temp1*2+2*temp ...
二、C++代码:
class Solution {
public:
string convert(string s, int numRows) {
if (numRows < 2)
return s;
int N = s.size();
string res = s;
int count = 0;
for (int i = 0; i < numRows; i++) {
res[count++] = s[i];
int nowPos = i;
int temp1 = (numRows - i - 1) * 2;
int temp2 = 2 * i;
while (nowPos < N) {
nowPos += temp1;
if (nowPos >= N)
break;
if (i != numRows - 1)
res[count++] = s[nowPos];
if (i == 0)
continue;
nowPos += temp2;
if (nowPos < N)
res[count++] = s[nowPos];
}
}
return res;
}
};