LeetCode第六题(Z字形变换)

141 阅读1分钟

Java实现

核心思想: 根据参数numRows将字符串划分成numRows行,遍历字符串过程中,依次将字符添加进对应行中,但需注意的是,字符添加进入首行或尾行后需要改变方向,最后将各行字符串依次拼接成完整字符串。

class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1)//行数为1,直接返回s
            return s;
        List<StringBuilder> rows = new ArrayList<StringBuilder>();
        for(int i = 0; i < numRows; i++)
            rows.add(new StringBuilder());
        int curRow = 0, flag = -1;//flag用于改变行的方向
        for(char ch : s.toCharArray()){
            rows.get(curRow).append(ch);//依次将字符添加进对应行中
            if(curRow == 0 || curRow == (numRows - 1))//字符添加进入首行或尾行后需要改变方向
                flag = -flag;
            curRow += flag;
        }
        //拼接各行字符串
        StringBuilder res = new StringBuilder();
        for(StringBuilder row : rows)
            res.append(row);
        return res.toString();
    }
}