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"
.
public class Solution {
public String convert(String s, int nRows) {
StringBuffer result=new StringBuffer();
if(nRows==0||s.length()==0)return result.toString();
if(nRows==1||s.length()==1)return s;
StringBuffer[] str=new StringBuffer[nRows];
for(int j=0;j<nRows;j++)str[j]=new StringBuffer();
int dic=-1;
int ord=0; // order of the StirngBuffer
for(char c: s.toCharArray()){
str[ord].append(String.valueOf(c));
if(ord==nRows-1||ord==0)dic*=-1;
ord+=dic;
}
//concat all the strings
int i=0;
while(i<nRows){
result.append(str[i].toString());
i++;
}
return result.toString();
}
}
Problems encountered:
1 for the StringBuffer array, not only that the array needed to be initialized, but each of the element needs to be initialized, or there will be the null pointer exception.
2 no problem is too small! Forget to update the variable when using while!!!