LeetCode 6. ZigZag Conversion Z字形变换(Java)

题目:

LeetCode 6. ZigZag Conversion Z字形变换(Java)_第1张图片LeetCode 6. ZigZag Conversion Z字形变换(Java)_第2张图片

解答:

这个题其实是一个找规律的题,假设 numRows=4,则Z字行排列后的结果如下,横排输出也就对应着字符串 s 中字符所对应的位置。
由观察可得,第一行和最后一行,每个字符对应位置之间的间隔为 2 * numRows - 2,中间第 i 行是 2(n-1)-2i,2i 两个间隔位置穿插,依照此规律进行实现。

0				8				16
1			7   9			15	17
2		6	    10		14		18
3	5			11	13			19
4				12				20
class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1) return s;
        StringBuilder res = new StringBuilder();
        int n = s.length();
        int temp = 2 * numRows - 2;
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j + i < n; j += temp) {
                res.append(s.charAt(j + i));
                if (i != 0 && i != numRows - 1 && j + temp - i < n)
                    res.append(s.charAt(j + temp - i));
            }
        }
        return res.toString();
    }
}

你可能感兴趣的:(LeetCode)