# LeetCode – ZigZag Conversion (Java)

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 a method convert("PAYPALISHIRING", 3) which returns "PAHNAPLSIIGYIR".

Java Solution

```public String convert(String s, int numRows) { if (numRows == 1) return s;   StringBuilder sb = new StringBuilder(); // step int step = 2 * numRows - 2;   for (int i = 0; i < numRows; i++) { //first & last rows if (i == 0 || i == numRows - 1) { for (int j = i; j < s.length(); j = j + step) { sb.append(s.charAt(j)); } //middle rows } else { 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(); }```
Category >> Algorithms >> Interview >> Java
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• Hello

``` string s; cin>>s; int k; cin>>k; vector v[k]; bool swapping; for(int i = 0; i < s.length(); i++){ if(i%(2*k-2)==0)swapping=true; else if(i%(k-1)==0)swapping=false;```

``` int tmp = i%(k-1); if(swapping){ result[tmp].push_back(s[i]); } else{ result[k-1-tmp].push_back(s[i]); } } for(int i = 0; i < k; i++){ for(int j = 0; j < v[i].size(); j++){ cout<<v[i][j]; } } ```

• Brandon Donnelson

Here is an alternative solution that works.

``` public String convert(String s, int numRows) { if (numRows == 1) { return s; }```

``` List<List> rows = new ArrayList<List>(); for (int i = 0; i < numRows; i++) { rows.add(new ArrayList()); } boolean add = true; int z = 0; for (int i = 0; i = numRows-1) { add = false; } else if (!add && z <= 0) { add = true; } if (add) { z++; } else { z--; } } StringBuffer sb = new StringBuffer(); for (int i = 0; i < numRows; i++) { sb.append(String.join("", rows.get(i))); } ```

``` return sb.toString(); } ```

• Hao Kuang

The examples should be given at least 3 and 4.