Question: 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 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".
Ref: Zig Zag conversion solution
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".
Ref: Zig Zag conversion solution
/*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 numRows) { if (numRows == 1) { return s; } int step = 2 * numRows - 2; StringBuilder sb = new StringBuilder(); for (int i = 0; i < numRows; i++) { if (i == 0 || i == numRows - 1) { // first and last rows for (int j = i; j < s.length(); j = j + step) { sb.append(s.charAt(j)); } } else { // handle middle rows int j = i; boolean flag = true; int step1 = 2 * (numRows - 1 - i); int step2 = step - step1; while (j < s.length()) { sb.append(s.charAt(j)); if (flag) { j = j + step1; } else { j = j + step2; } flag = !flag; } } } return sb.toString(); } }
No comments:
Post a Comment