爱程序网

LeetCode - 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".

思路:

我是通过找规律找到每一行应该取哪个字符。

package string;

public class ZigZagConversion {

    public String convert(String s, int numRows) {
        if (s == null || numRows == 1) return s;
        int gap = 2 * (numRows - 1);
        int len = s.length();
        StringBuilder sb = new StringBuilder("");
        
        for (int i = 0; i < numRows; ++i) {
            for (int j = i; j < len; j += gap) {
                sb.append(s.charAt(j));
                int next = j + 2 * (numRows - i - 1);
                if (i != 0 && i != numRows - 1 && next < len)
                    sb.append(s.charAt(next));
            }
        }
        
        return sb.toString();
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s = "A";
        ZigZagConversion z = new ZigZagConversion();
        System.out.println(z.convert(s, 1));
    }

}

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助