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"
.
// P I N // A LS IG // Y A H R // P I public String convert(String s, int nRows) { if(nRows <=1) return s; StringBuilder sb = new StringBuilder(); int len = s.length(); int step = (nRows-1) * 2; for(int i=0; i<nRows; i++) { int j = i; while(j < len) { sb.append(s.charAt(j)); if(!(i==0 || i==nRows-1)) { int k = j+ 2*(nRows-i-1); if(k<len) sb.append(s.charAt(k)); } j += step; } } return sb.toString(); }
重构了下代码:
// P I N // A L S I G // Y A H R // P I public String convert(String s, int numRows) { if(numRows <= 1) return s; String res = ""; int n = numRows-1; for(int i=0; i<numRows; i++) { int j = i; while(j < s.length()) { res += s.charAt(j); j += (n - j%n)*2; } } return res; }