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"
.
my answer:
public class Solution_6 {
public String convert(String s, int numRows) {
if (numRows <=1 || s.length() == 0)
return s;
String result = "";
int len = s.length();
for (int x=0;x<numRows && x<len; x++){
int pos = x;
//System.out.println(pos);
result += s.charAt(pos);
//System.out.println(result + "lala");
for (int y=1;pos<len;y++){
if(x==0 || x==numRows-1){
pos += 2*(numRows-1);
}else{
System.out.println(pos);
if (y%2 == 1){
pos += 2*(numRows-1-x);
}
else
//System.out.println(pos + "la");
pos +=2*x;
}
if(pos<len){
//System.out.println(pos);
result+=s.charAt(pos);
}
}
}
return result;
}
参考:http://www.cnblogs.com/sanghai/p/3632528.html
改进:
public static String convert(String s, int numRows) {
if (numRows <=1 || s.length() == 0)
return s;
String result = "";
int len = s.length();
int i = 0, j, gap = numRows-2;
String[] temp = new String[numRows];
for(int m=0;m<numRows;m++)
temp[m]="";
while(i<len){
for(j=0;j<numRows && i<len;j++){
//System.out.println(s.charAt(i));
temp[j] += s.charAt(i++);
}
for(j=gap;i<len && j>0;j--)
temp[j] += s.charAt(i++);
}
for(i=0;i<numRows;i++)
result += temp[i];
return result;
}