# Z 字形变换

<div class="notranslate">
    <p>将一个给定字符串 <code>s</code> 根据给定的行数 <code>numRows</code> ，以从上往下、从左到右进行&nbsp;Z 字形排列。</p>

    <p>比如输入字符串为 <code>"PAYPALISHIRING"</code>&nbsp;行数为 <code>3</code> 时，排列如下：</p>

    <pre>
    P   A   H   N
    A P L S I I G
    Y   I   R</pre>

    <p>之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如：<code>"PAHNAPLSIIGYIR"</code>。</p>

    <p>请你实现这个将字符串进行指定行数变换的函数：</p>

    <pre>string convert(string s, int numRows);</pre>

    <p>&nbsp;</p>

    <p><strong>示例 1：</strong></p>

    <pre><strong>输入：</strong>s = "PAYPALISHIRING", numRows = 3
<strong>输出：</strong>"PAHNAPLSIIGYIR"
</pre>
    <strong>示例 2：</strong>

    <pre><strong>输入：</strong>s = "PAYPALISHIRING", numRows = 4
<strong>输出：</strong>"PINALSIGYAHRPI"
<strong>解释：</strong>
P     I    N
A   L S  I G
Y A   H R
P     I
</pre>

    <p><strong>示例 3：</strong></p>

    <pre><strong>输入：</strong>s = "A", numRows = 1
<strong>输出：</strong>"A"
</pre>

    <p>&nbsp;</p>

    <p><strong>提示：</strong></p>

    <ul>
        <li><code>1 &lt;= s.length &lt;= 1000</code></li>
        <li><code>s</code> 由英文字母（小写和大写）、<code>','</code> 和 <code>'.'</code> 组成</li>
        <li><code>1 &lt;= numRows &lt;= 1000</code></li>
    </ul>
</div>

## template

```python
import math
class Solution:
	def convert(self, s: str, numRows: int) -> str:
		n = len(s)
		N = numRows
		if n == 1 or N == 1:
			return s
		S = N-2
		C = 2*N-2
		R = int(math.floor(n/C))
		RS = n % (C)
		CE = n-R*C
		RR = 1 if (RS <= N) else 1+(RS-N)
		RX = R*(N-1) + RR
		output = []
		i = 0
		while i < N:
			j = 0
			k = (N-1-i)
			while j < RX:
				r = int(math.floor(j/(N-1)))
				rs = j % (N-1)
				offset = i if rs == 0 else N+rs-1
				index = r*C+offset
				if index < len(s):
					output.append(s[index])
				if i > 0 and i < N-1:
					r = int(math.floor(k/(N-1)))
					rs = k % (N-1)
					offset = i if rs == 0 else N+rs-1
					index = r*C+offset
					if index < len(s):
						output.append(s[index])
				j += (N-1)
				k += (N-1)
			i += 1
		return ''.join(output)
# %%
s = Solution()
print(s.convert('PAYPALISHIRING', 3))
```

## 答案

```python

```

## 选项

### A

```python

```

### B

```python

```

### C

```python

```