/**
* @Time : 18/03/2018 15:59
* @Author : lotus
* @File : ZigzagPattern.java
* @Software: IntelliJ IDEA
* @Desc :
* @license : Copyright(C), Alex
* @Contact : alex.cs.monash@gmail.com
*/import java.util.Scanner;
/**
* Question: 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".
*/publicclassZigzagPattern {public String convert(String s, int numRows) {
if (s == null || s.length() == 0 || numRows <= 1 || s.length() <= numRows) {
return s;
}
finalint batch = 2 * numRows - 2;
finalint length = s.length();
finalchar[] chars = s.toCharArray();
StringBuilder output = new StringBuilder(length);
for (int i = 0; i < length; i += batch) {
output.append(chars[i]);
}
for (int i = 1; i < numRows - 1; i++) {
for (int j = 0; j + i < length; j += batch) {
output.append(chars[j + i]);
if (j + batch - i < length) {
output.append(chars[j + batch - i]);
}
}
}
for (int i = numRows - 1; i < length; i += batch) {
output.append(chars[i]);
}
return output.toString();
}
publicstaticvoidmain(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
int rows = Integer.parseInt(scanner.next());
ZigzagPattern zigzag = new ZigzagPattern();
System.out.println(zigzag.convert(input, rows));
}
}