leetcode- Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P  A  H  N

A P L S I I G

Y  I  R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);


示例 1:

输入:s = "PAYPALISHIRING", numRows = 3

输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4

输出:"PINALSIGYAHRPI"

解释:

P    I    N

A  L S  I G

Y A  H R

P    I

示例 3:

输入:s = "A", numRows = 1

输出:"A"

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/zigzag-conversion

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


代码实现:

class Solution {

    public String convert(String s, int numRows) {

        List chars = new ArrayList<>(numRows);

        int index = 0;

        int row = 0;

        int column = 0;

        boolean flag = true;

        while(index < s.length()) {

            char ch = s.charAt(index);

            if (chars.size() <= row) {

                chars.add(row, new Character[s.length()]);

            }

            chars.get(row)[column] = ch;

            if (flag) {

                row++;

                if (row+1 == numRows) {

                    flag = false;

                }

            } else {

                row--;

                column++;

                if (row == 0) {

                    flag = true;

                }

            }

            index++;

        }

        String newStr = "";

        for (Character[] line : chars) {

            for (int i = 0; i < line.length; i++) {

                if (line[i] == null) {

                    continue;

                }

                newStr += line[i];

            }

        }

        return newStr;

    }

}

你可能感兴趣的:(leetcode- Z 字形变换)