/**
*
* 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".
*
*/
public class ZigZag {
public String convert(String s, int nRows) {
if (nRows == 1 || s.length() <= 1) {
return s;
}
StringBuilder str = new StringBuilder();
for (int i = 0; i < nRows; i++) {
int index = i;
int j = 0;
while(index < s.length()) {
str.append(s.charAt(index));
if (!(i == 0 || i == nRows - 1)) { //第一行和最后一行没有斜线上的数
if (index + (nRows - i - 1) * 2 < s.length())
str.append(s.charAt(index + (nRows - i - 1) * 2));
}
j++;
index = (2 * nRows - 2) * j + i;
}
}
return str.toString();
}
public static void main(String[] args) {
System.out.println(new ZigZag().convert("PAYPALISHIRING", 3));
System.out.println(new ZigZag().convert("A", 1));
System.out.println(new ZigZag().convert("ABCDE", 4));
}
}
[LeetCode Java] 6 ZigZag conversion
最新推荐文章于 2024-07-25 11:15:54 发布