6.Z字形变换

思路 - 找规律

  • 找规律题

每一行都是等差数列

样例

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
解释:
P   A   H   N
A P L S I I G
Y   I   R

第一行和最后一行字符间的距离是2*numRows - 2

中间几行:

  • 先除去斜线上的字符,字符间距离也是2*numRows - 2

  • 第i行对应的斜线字符起点是2*numRows-2-i,斜线上字符间距也是2*numRows - 2

  • numRows = 1时\((2*n)-2 = 0\), 会进入死循环, 因此需要特判

class Solution {
public:
    string convert(string s, int n) 
    {
        if(n == 1) return s;
        string res;
        int size = s.size();
        for(int i = 0; i < n; i++)
        {
            if(i == 0 || i == n - 1)
            {
                for(int j = i; j < size; j += 2 * n - 2)
                    res += s[j];
            }
            else
            {
                for(int j = i, k = 2 * n - 2 - i; j < size || k < size; j += 2 * n - 2 , k += 2 * n - 2)
                {
                    if(j < size) res += s[j];
                    if(k < size) res += s[k];
                }
            }
        }
        return res;
    }
};
posted @ 2022-11-08 13:51  INnoVation-V2  阅读(31)  评论(0编辑  收藏  举报