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”.
题意:按照给定规则(如下)获得字符串
A G
| / |
B F H
| / |
C E i
| /
D
解决思路:按照规则一个个弄
代码:
public class Solution {
public String convert(String s, int numRows) {
if(numRows == 1){
return s;
}
char[] str = s.toCharArray();
StringBuilder[] sb = new StringBuilder[numRows];
for (int i = 0; i < sb.length; i++){
sb[i] = new StringBuilder();
}
int pos = 0;
boolean isSpecial = false;
for(int i = 0;i < s.length();++i){
sb[pos].append(str[i]);
if(!isSpecial){
if(pos + 1 < numRows){
++pos;
}else{
--pos;
isSpecial = true;
}
}else{
--pos;
if(pos < 0){
pos = 1;
isSpecial = false;
}
}
}
for(int i = 1;i < numRows;++i){
sb[0].append(sb[i]);
}
return sb[0].toString();
}
}