ZigZagConversion
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”.
public class Solution {
public String convert(String s, int numRows) {
int period = 2*numRows-2;
int len = s.length();
boolean odd = true;
char[] c1 = s.toCharArray();
char[] c2 = new char[len];
if(numRows==1||len<2||len<=numRows)return s;
int newi=0;
for(int i=0;i<numRows;i++){
if(i==0){ //first row
for(int j=i;j<len;j=j+period){
c2[newi]=c1[j];
newi++;
}
}
if(i>=1&&i<=numRows-2){
int j=i;
while(j<len){
if (odd==true){
c2[newi]=c1[j];
j=j+(period-2*i);
newi++;
}
if(odd==false){
c2[newi]=c1[j];
j=j+2*i;
newi++;
}
odd=!odd;
}
odd=true;
}
if(i==numRows-1){
for(int j=i;j<len;j=j+period){
c2[newi]=c1[j];
newi++;
}
}
}
return String.copyValueOf(c2);
}
}
这段代码码了一天,一开始采用了错误的思路。打算中间几行采用两次打印到新的数组里,分别一次打印奇数列,指针回到开头后打印偶数列。后来发现调试很困难,之后采取了一般性的思路,发现难度并不大。
代码还有待优化,过两天再来看。