6. ZigZag Conversion - LeetCode

Posted okokabcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6. ZigZag Conversion - LeetCode相关的知识,希望对你有一定的参考价值。

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

以上是关于6. ZigZag Conversion - LeetCode的主要内容,如果未能解决你的问题,请参考以下文章

学习(Swift)Leetcode 6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion (字符串的连接)

leetcode题解 6.ZigZag Conversion