006.Z 字形变换:二哥的 LeetCode 刷题笔记
题意
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例
示例 1:
- 输入:s = "PAYPALISHIRING", numRows = 3
- 输出:"PAHNAPLSIIGYIR"
示例 2:
- 输入:s = "PAYPALISHIRING", numRows = 4
- 输出:"PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
示例 3:
- 输入:s = "A", numRows = 1
- 输出:"A"
难度
中等
分析
看到这道题的描述,需要先搞清楚,如何把一个字符串按照指定的行数进行 Z 字形排列,这是这道题的关键所在。
当然了,严格上来说,是倒着的 Z 字,题目应该叫 N 字形变换(😂)更确切一点。
哦,N 字形也不确切,确切的说应该是这样 |/|
,这样有什么规律呢?
- 先向下走,走到底
- 触底向上,往上走
- 触顶再向下,如此往复
假设有一个字符串 沉默王二是傻调
,numRows = 3,我们来通过图示的方式盘一盘。
三行我们就初始化三个 StringBuilder 数组,用来存放每一行的字符,然后我们就开始按照上面的规律来进行字符的存放。
第一行放入“沉”,第二
真诚点赞 诚不我欺
回复