https://leetcode.com/problems/zigzag-conversion/
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"
.
这道题只要看出规律是按 2×nRows-2重复就行,然后按照规律再每行依次打印就可以了。
public class Solution {
public String convert(String s, int nRows) {
if(s==null || s.length()==0 || nRows<=0) return "";
if(nRows == 1) return s;
int size = 2*nRows - 2;
StringBuilder sb = new StringBuilder();
for(int i=0; i<nRows; i++){
for(int j=i; j<s.length(); j+= size){
sb.append(s.charAt(j));
int next = (size - j%size) + size * (j/size);
if(i!=0 && i!=(nRows-1) && next<s.length()) sb.append(s.charAt(next));
}
}
return sb.toString();
}
}