6. ZigZag Conversion

这其实是道数学题,在纸上画画很容易看出规律。关键在于找出当前元素的下一个元素是什么。

对于第一行和最后一行,元素之间的下标有固定的间隔。

对于中间的几行,除了有固定间隔的元素外,还跟当前是第几行有关。

剩下的就是注意一些边界条件就好了。

public class Solution {
    public String convert(String s, int numRows) {
        // 一些边界条件
        if (s == null)
            return null;
        if (s.length() <= numRows)
            return s;
        if (numRows <= 1) {
            return s;
        }

        int step = numRows * 2 - 2;  // 第一行和最后一行的,元素之间的间隔
        StringBuilder sb = new StringBuilder();

        // 依次处理每行的元素
        for (int i = 0; i < numRows; i++) {
            int next = i;
            while (next < s.length()) {
                sb.append(s.charAt(next));
                next += step;
                if (i != 0 && i != numRows - 1) {
                    // 如果不是第一行和最后一行,还要额外加上一个元素
                    // 而这个元素的下标和当前是第几行有关
                    int tmp = next - i * 2;
                    if (tmp < s.length()) {
                        sb.append(s.charAt(tmp));
                    }
                }
            }
        }

        return sb.toString();
    }
}

results matching ""

    No results matching ""