6. ZigZag Conversion
- Total Accepted: 116139
- Total Submissions: 455261
- Difficulty: Easy
- Contributors: Admin
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 RAnd 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"
.
这题要考虑数学推算的,如:0123456789
row=3:0481357926
0 4 8
1 3 5 7 9
2 6
row=4:0615724839
0 6
1 5 7
2 4 8
3 9
代码如下:
public class Solution {
public String convert(String s, int numRows) {
int len = s.length();
if (len == 0 || numRows <= 1)
return s;
String res[] = new String[numRows];
Arrays.fill(res, "");
int row=0,delta=1;
for (int i = 0; i < len; i++) {
res[row]+=s.charAt(i);
row+=delta;
if (row>=numRows) {
row = numRows-2;
delta = -1;
}
if (row<0) {
row=1;
delta=1;
}
}
String ans = "";
for (int i = 0; i < numRows; i++) {
ans+=res[i];
}
return ans;
}
}