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;}
};