6. N 字形变换

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

你可能感兴趣的:(#,LeetCode刷题,算法,力扣)