https://leetcode.cn/problems/zigzag-conversion/description/
思路
找规律:
- 首尾两行的下标是一个以
i
为第一个元素,2n-2
为公差的等差数列 - 中间元素的奇数元素是一个以
i
为第一个元素,2n-2
为公差的等差数列
偶数元素是一个以2n-i-2
为第一个元素,2n-2
为公差的等差数列
需要注意的是当n为1时,公差2n-2
会变为0
, 会出现死循环
for (int k = i, j = (2 * n - i - 2);
k < s.size() || j < s.size();
k += (2 * n - 2),j += (2 * n - 2))
代码
class Solution {
public:
string convert(string s, int n) {
if (n == 1) return s;
string res;
// i代表行数
for (int i = 0; i < n; i ++){
if (i == 0 || i == n - 1){
for (int k = i; k < s.size(); k += (2 * n - 2)){
res += s[k];
}
}
else{
for (int k = i, j = (2 * n - i - 2); k < s.size() || j < s.size(); k += (2 * n - 2),j += (2 * n - 2)){
if (k < s.size()) res += s[k];
if (j < s.size()) res += s[j];
}
}
}
return res;
}
};