6. ZigZag Conversion

Question

6. ZigZag Conversion

Solution

题目大意:将字符串按Z字型排列,然后再一行一行按字符输出

思路:按题目中的第一个例子,画出如下图,通过n的不同值,可以找出规律红线的长度是2*n-2,蓝线的长度是interval - row,这样根据已知参数知道有n行,所以遍历n行,每行有多少列呢,每一列最后一列必须小于s.length,这样就可以通过遍历来求出最终结果了。

Java实现:

public String convert(String s, int n) {
    if (n == 1 || n >= s.length()) return s;

    StringBuilder sb = new StringBuilder();
    int interval = 2 * n - 2;
    for (int row = 0; row < n; row++) {
        int step = interval - 2 * row;
        for (int col = row; col < s.length(); col += interval) {
            sb.append(s.charAt(col));
            if (step > 0 && step < interval && (col + step) < s.length()) {
                sb.append(s.charAt(col + step));
            }
        }
    }
    return sb.toString();
}

Ref

思路参考了这个视频:https://www.youtube.com/watch?v=7UQ71uwQFx4

原文地址:https://www.cnblogs.com/okokabcd/p/9463012.html