6. ZigZag Conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P A H N A P L S I I G Y I R
And then read line by line: "PAHNAPLSIIGYIR"

 

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

 

即写成z字型,假设字符串是ABCDEFGHIJK,行数是5,则转换为
A           I
B       H J
C    G    K 
D F
E
 
class Solution {
    public String convert(String s, int numRows) {
        char[] c = s.toCharArray();
        int len = c.length;
        StringBuffer[] sb = new StringBuffer[numRows];
        for (int i = 0; i < sb.length; i++) 
            sb[i] = new StringBuffer();
        
        int i = 0;
        while (i < len) {
            for (int idx = 0; idx < numRows && i < len; idx++)
                sb[idx].append(c[i++]); //原字符串从上往下加入到StringBuffer中
            for (int idx = numRows-2; idx >= 1 && i < len; idx--)
                sb[idx].append(c[i++]); //原字符串从下往上加入到StringBuffer中
        }
        for (int idx = 1; idx < sb.length; idx++)
            sb[0].append(sb[idx]);
        return sb[0].toString();
    }
}
posted @ 2019-04-09 16:36  MarkLeeBYR  阅读(116)  评论(0)    收藏  举报