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)
1 2 3
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:
1
string convert(string s, int numRows);
Example 1:
1 2
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"
Example 2:
1 2 3
Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation:
public String convert(String s, int numRows){ if(numRows == 1){ return s; } StringBuilder res = new StringBuilder(); int len = s.length(); for(int i = 0; i < len; i = i + 2 * numRows - 2){ res.append(s.charAt(i)); } for(int i = 1; i < numRows - 1; i++){ int step = 2*i; int index = i; while(index < len){ res.append(s.charAt(index)); step = 2 * numRows - 2 - step; index += step; } } for(int i = numRows - 1; i < len; i = i + 2 * numRows - 2){ res.append(s.charAt(i)); } return res.toString(); }