Let's take a look at an example first:

```
0 6 12
1 5 7 11 13
2 4 8 10 14
3 9 15
```

From the above example, the common distance between two adjacent char in first line is * dist = (numRows-1)2, we can see for the first line and last line the formula is 6*n+0 and 6

*n+3, it can simplify to*. But for the middle horizontal lines, there are 2 formulas,

*dist*col+row** and*

*dist*step-row***

*dist*step+rowFor example: line #2, it can be divided into two arrays [1 7 13] and [5 11], and the formula are 6

*n+1 and 6*n -1.

```
public class Solution{
public string convert(string s, int numRows){
StringBuilder sb = new StringBuilder(s.Length);
int dist= (numRows-1)*2;
dist= dist==0?1:dist; // if there is only one line.
for(int i=0;i<numRows;i++)
{
for(int j=0;j<s.Length;j++)
{
if(i>0 && i<numRows-1 && dist*j-i>0 && dist*j-i<s.Length) sb.Append(s[dist*j-i]);
if(dist*j+i<s.Length) sb.Append(s[dist*j+i]);
else break;
}
}
return sb.ToString();
}
```

}