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 s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:
P I N
A L S I G
Y A H R
P I
根据题意就是讲原先的字符串 以z型输出,再重新拼接成一个结果字符串在输出最终结果。
public String convert(String s, int numRows) {
if (s == null || s.isEmpty() || numRows <= 0) {
return "";
}
if(s.length() <= numRows || numRows==1) {
return s;
}
String res="";
//以s = "PAYPALISHIRING", numRows = 3为例第一行所在原先的字符串中为0,0+(numRows-1)*2,0+(numRows-1)*2+(numRows-1)*2。。。
//即(n>1时)第n个为(numRows-1)*n,n=1时为0
int row= 0;
while(row<numRows) {
if (row == 0 || row == numRows-1) {
int tmpIdex=row;
res += s.charAt(tmpIdex);
while ((tmpIdex = tmpIdex+(2 * (numRows - 1))) < s.length()) {
res += s.charAt(tmpIdex);
}
} else {
int tmpIdex = row;
int tmpIdex2 = row;
if (tmpIdex < s.length()) {
res += s.charAt(tmpIdex);
}
if ((tmpIdex2 =( tmpIdex2 + 2 * (numRows - row - 1))) < s.length()) {
res += s.charAt(tmpIdex2);
}
while ((tmpIdex = tmpIdex+(2 * (numRows - 1))) < s.length()) {
res += s.charAt(tmpIdex);
if ((tmpIdex2 = (2 * (numRows - 1) + tmpIdex2) )< s.length()) {
res += s.charAt(tmpIdex2);
}
}
}
row++;
}
return res;
}