6. 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"
解題思路
我們維護一個stringBuilder數組,記錄下每一行里面的元素
- 因為z型遍歷存在一個規律,字母所放置的行號先是增加,到達邊界以后會減少,如此循環往復
代碼
class Solution {public String convert(String s, int numRows) {if(numRows==1) return s;StringBuilder[] sb=new StringBuilder[numRows];for(int i=0;i<numRows;i++)sb[i]=new StringBuilder();int row=0,k=0;boolean down=true;while(k<s.length()){if(row==0){down=true;}else if(row==numRows-1){down=false;}sb[row].append(s.charAt(k++));row=down?row+1:row-1;}for(int i=1;i<numRows;i++)sb[0].append(sb[i]);return sb[0].toString();}
}