6. Z 字形變換 flag改變遍歷方向

個人題解網 https://www.b2bchain.cn/6190.html 

//將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 
//
// 比如輸入字符串爲 "LEETCODEISHIRING" 行數爲 3 時,排列如下: 
//
// L   C   I   R
//E T O E S I I G
//E   D   H   N
// 
//
// 之後,你的輸出需要從左往右逐行讀取,產生出一個新的字符串,比如:"LCIRETOESIIGEDHN"。 
//
// 請你實現這個將字符串進行指定行數變換的函數: 
//
// string convert(string s, int numRows); 
//
// 示例 1: 
//
// 輸入: s = "LEETCODEISHIRING", numRows = 3
//輸出: "LCIRETOESIIGEDHN"
// 
//
// 示例 2: 
//
// 輸入: s = "LEETCODEISHIRING", numRows = 4
//輸出: "LDREOEIIECIHNTSG"
//解釋:
//
//L     D     R
//E   O E   I I
//E C   I H   N
//T     S     G 
// Related Topics 字符串


import java.util.ArrayList;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String convert(String s, int numRows) {
        //特殊情況 只有一行的時候
        if (numRows == 1) return s;
        //z字 從上到下 從下到上 依次存入對應的行內,直到全部遍歷完成
        List<StringBuilder> row=new ArrayList<>();
        for (int i = 0; i <numRows ; i++) {
            row.add(new StringBuilder());
        }
        int flag=-1;
        int i=0;
        for(Character c:s.toCharArray()){
            if(i==0 || i==row.size()-1) flag=-flag;
            row.get(i).append(c);
            i+=flag;
        }
        StringBuilder ans=new StringBuilder();
        for(StringBuilder sb:row){
            ans.append(sb);
        }
        return ans.toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章