🌕 6. Z 字形变换

吞佛童子2022年6月20日
  • algorithm
  • String
  • 细节问题
小于 1 分钟

🌕 6. Z 字形变换

难度: 🌕

问题描述

img_1.png


解法

class Solution {
    public String convert(String s, int numRows) {
        // 思路:
        // 画图,找规律
        // 步长 step = numRows + (numRows - 2) == 2n - 2 为一组
        // 第 0 行: 0  step  2step ...
        // 第 1 行: 1  step - 1  step + 1  2step - 1 2step + 1 ...
        // 第 n - 2 行: n - 2  step - (n - 2) step + (n - 2) ...
        // 第 n - 1 行: n - 1  step + (n - 1) ...
        int len = s.length();
        int step = numRows + numRows - 2;
        // 特殊情况特判
        if(numRows == 1) {
            return s;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < numRows; i ++) {
            for(int j = 0; j < len + i; j = j + step) {
                if(i != 0 && i != numRows - 1) {
                    // 需要加上前面那条对角线元素
                    if(j - i > 0) {
                        sb.append(s.charAt(j - i));
                    }
                }
                if(j + i < len) {
                    sb.append(s.charAt(j + i));
                }
            }
        }
        return sb.toString();
    }
}

输出

img.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou