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"
.
Subscribe to see which companies asked this question
1.非常直接的,没有优化过
public class Solution {
public String convert(String s, int numRows) {
if(numRows==1)
return s;
String[] data=new String[numRows];
int i=0;
int j=0;
for(i=0;i<numRows;++i){
data[i]="";
}
for(i=0;i<s.length();i=i+numRows*2-2){
int z=i;
for(j=0;j<numRows&&z<s.length();++j){
data[j]+=s.charAt(z);
++z;
}
for(j=numRows-2;j>0&&z<s.length();--j){
data[j]+=s.charAt(z);
++z;
}
}
String re="";
for(i=0;i<numRows;++i)
re+=data[i];
return re;
}
}
2.More elegent code find in discuss
public class Solution {
public String convert(String s, int numRows) {
if(numRows<=1)
return s;
StringBuilder[] data=new StringBuilder[numRows];
for(int i=0;i<numRows;++i)
data[i]=new StringBuilder("");
int index=0;
int step=1;
for(int i=0;i<s.length();++i){
data[index].append(s.charAt(i));
if(index==0)
step=1;
if(index==numRows-1)
step=-1;
index+=step;
}
String re="";
for(int i=0;i<numRows;++i){
re+=data[i].toString();
}
return re;
}
}