Contents

# Problem

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:

`string convert(string s, int numRows);`

## example 1

 ``````1 2 `````` ``````Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" ``````

## example 2

 ``````1 2 3 4 5 6 7 8 `````` ``````Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I ``````

# Solution

## Sort by Row

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 `````` ``````func convert(s string, numRows int) string { if numRows == 1 { return s } a:= make(map[int]string, numRows) i:=0 d:=+1 for idx:=range s { if i == 0 { d=1 } if i == numRows-1 { d=-1 } a[i] += string(s[idx]) i+=d } res := "" for idx:=0;idx