力扣解题思路:6. Z 字形变换

6. Z 字形变换


思路:这一题看似比较麻烦,其实规律很简单:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L     D     R
E   O E   I I
E C   I H   N
T     S     G

我们可以看到,实际上我们打印的顺序就是从上往下,当到达了顶端或者低端时就开始换列(行的移动顺序取反),列不是每次都换,而是一次换一次不换。再仔细看题会发现打印的其实不含空格,那么这样一来,实际上换列这一做法并没有必要,因为空格都被忽略了。
我们用StringBuilder来表示每一行:

public String convert(String s, int numRows) {
    if(numRows<2) return s;
    List<StringBuilder> rows = new ArrayList<StringBuilder>();
    for(int i = 0;i<numRows;i++){
        rows.add(new StringBuilder());
    }
    int i=0,flag = -1;
    for(char c : s.toCharArray()){
        rows.get(i).append(c);//i代表行
        if(i==0||i==numRows-1) flag = -flag;//改变行的遍历顺序
        i+=flag;//换行
    }
    StringBuilder res = new StringBuilder();
    for(StringBuilder row : rows) res.append(row);
    return res.toString();
}
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页