"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"
.
- public String convert(String s, int nRows) {
- if(s == null || s.length()==0 || nRows <=0)
- return "";
- if(nRows == 1)
- return s;
- StringBuilder res = new StringBuilder();
- int size = 2*nRows-2;
- for(int i=0;i<nRows;i++)
- {
- for(int j=i;j<s.length();j+=size)
- {
- res.append(s.charAt(j));
- if(i!=0 && i!=nRows-1 && j+size-2*i<s.length())
- res.append(s.charAt(j+size-2*i));
- }
- }
- return res.toString();
- }
/*n=numRows Δ=2n-2 1 2n-1 4n-3 Δ= 2 2n-2 2n 4n-4 4n-2 Δ= 3 2n-3 2n+1 4n-5 . Δ= . . . . . Δ= . n+2 . 3n . Δ= n-1 n+1 3n-3 3n-1 5n-5 Δ=2n-2 n 3n-2 5n-4 */
public class Solution {
public String convert(String s, int nRows) {
if(s == null || s.length() == 0 || nRows <= 0)
return "";
if(nRows == 1)
return s;
StringBuilder res = new StringBuilder();
int size = 2 * nRows - 2;
for(int i = 0; i < nRows; i++)
{
for(int j = i;j < s.length(); j += size)
{
res.append(s.charAt(j));
if(i != 0 && i != nRows - 1 && j + size - 2 * i < s.length())
res.append(s.charAt(j + size - 2 * i));
}
}
return res.toString();
}
}