The string “PAYPALISHIRING” is written in a zigzag(Z字形) 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"
.
Tags:String
import java.util.*;
public class No6 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int n = scanner.nextInt();
String str = convert(s, n);
System.out.println(str);
}
public static String convert(String s, int n) {
if(n==1)
return s;
int dot = n + n - 2; // 折点
String[] str = new String[n];
String str1 = "";
for (int a = 0; a < n; a++) {
str[a] = "";
}
int i = 0;
while (dot * i < s.length()) {
str[0] += s.charAt(dot * i);
i++;
}
// return str[0];
int dots;
for (int j = 1; j < n - 1; j++) { // j表示行数;从第2行到倒数第2行;
i = 0; //重置为0;
while ((dots = dot * i) < s.length()) {
if ((dots + j) < s.length()) {
str[j] += "" + s.charAt(dots + j);
}
if ((dots + dot - j) < s.length()) {
str[j] += "" + s.charAt(dots + dot - j);
}
i++;
}
}
i = 0; // 重置i;
while ((n - 1 + dot * i) < s.length()) {
str[n - 1] += s.charAt(n - 1 + dot * i);
i++;
}
for (i = 0; i < n; i++) {
str1 += str[i];
}
return str1;
}
}
input
abcdefghijklmnopqrstuvwxyz 5
output
aiqybhjprxzcgkoswdflntvemu
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
a0 | i8 | q16 | y24 | |||||||||
b1 | h7 | j9 | p15 | r17 | x23 | z25 | ||||||
c2 | g6 | k10 | o14 | s18 | w22 | |||||||
d3 | f5 | l11 | n13 | t19 | v21 | |||||||
e4 | m12 | u20 |