## 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 `"LEETCODEISHIRING"` 行数为 3 时,排列如下: `L C I R` `E T O E S I I G` `E D H N` 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数: `string convert(string s, int numRows);` **示例1**: 输入: s = "LEETCODEISHIRING", numRows = 3输出: "LCIRETOESIIGEDHN" **示例2**: 输入: s = "LEETCODEISHIRING", numRows = 4输出: "LDREOEIIECIHNTSG"<br>解释: L D R E O E I I E C I H N T S G 来源:力扣(LeetCode) 链接:[https://leetcode-cn.com/problems/zigzag-conversion/](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9sZWV0Y29kZS1jbi5jb20vcHJvYmxlbXMvemlnemFnLWNvbnZlcnNpb24v) ## [#](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9iaWFvZGlnaXQuZ2l0aHViLmlvL0xlZXRDb2RlLzAwMDYvIyVFOCVBNyVBMyVFOSVBMiU5OCVFNiU4MCU5RCVFOCVCNyVBRjEtJUU2JThDJTg3JUU5JTkyJTg4JUU2JUIzJTk1)解题思路1:指针法 1.首先设置三个变量: * `rows`:用于存放每一行的字符串的数组 * `goingDown`:用于判断字符串遍历方向是往上还是往下 * `curRow`:当前遍历字符串应当存放的行数 2.从左至右遍历字符串,`rows[curRow]=str`,如下图:  从`P`开始遍历,存储到第一行字符串,而且当前行数为0,证明当前位置在顶部,那么遍历方向一定是是向下的,所以设置`goingDown`为`true`,`curRow`加1  如上图,当遍历到第二个`P`时,已经到了底部,那么意味下一次遍历就是反方向的,那么`goingDown`为false,`curRow`就要相应减1让下一个遍历的字符存储到上一行 ## [#](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9iaWFvZGlnaXQuZ2l0aHViLmlvL0xlZXRDb2RlLzAwMDYvIyVFNCVCQiVBMyVFNyVBMCU4MSVFNSVBRSU5RSVFNyU4RSVCMA==)代码实现 let convert = (s, nRows) => { if (nRows <= 1) return s; let rows = Array(Math.min(nRows, s.length)).fill(''), goingDown = false, curRow = 0, res = ''; for (let i = 0, len = s.length; i < len; i++) { rows[curRow] += s.charAt(i); if (curRow === 0 || curRow === nRows - 1) goingDown = !goingDown; curRow += goingDown ? 1 : -1 } for (let str of rows) { res += str } return res}; Loading... ## 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 `"LEETCODEISHIRING"` 行数为 3 时,排列如下: `L C I R` `E T O E S I I G` `E D H N` 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数: `string convert(string s, int numRows);` **示例1**: <pre class="wp-block-zibllblock-enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"><div class="enlighter-toolbar"><div class="enlighter-btn enlighter-btn-raw"></div><div class="enlighter-btn enlighter-btn-copy"></div><div class="enlighter-btn enlighter-btn-window"></div></div><div class="enlighter"><div class=""><div><span class="enlighter-text">输入: s = </span><span class="enlighter-s0">"LEETCODEISHIRING"</span><span class="enlighter-text">, numRows = </span><span class="enlighter-n1">3</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text">输出: </span><span class="enlighter-s0">"LCIRETOESIIGEDHN"</span></div></div></div></div></pre> **示例2**: <pre class="wp-block-zibllblock-enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"><div class="enlighter-toolbar"><div class="enlighter-btn enlighter-btn-raw"></div><div class="enlighter-btn enlighter-btn-copy"></div><div class="enlighter-btn enlighter-btn-window"></div></div><div class="enlighter"><div class=""><div><span class="enlighter-text">输入: s = </span><span class="enlighter-s0">"LEETCODEISHIRING"</span><span class="enlighter-text">, numRows = </span><span class="enlighter-n1">4</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text">输出: </span><span class="enlighter-s0">"LDREOEIIECIHNTSG"</span><span class="enlighter-g1"><</span><span class="enlighter-text">br</span><span class="enlighter-g1">></span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text">解释:</span></div></div><div class=""><div><span class="enlighter-text"> L D R</span></div></div><div class=""><div><span class="enlighter-text"> E O E I I</span></div></div><div class=""><div><span class="enlighter-text"> E C I H N</span></div></div><div class=""><div><span class="enlighter-text"> T S G</span></div></div></div></div></pre> 来源:力扣(LeetCode) 链接:[https://leetcode-cn.com/problems/zigzag-conversion/](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9sZWV0Y29kZS1jbi5jb20vcHJvYmxlbXMvemlnemFnLWNvbnZlcnNpb24v) ## [#](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9iaWFvZGlnaXQuZ2l0aHViLmlvL0xlZXRDb2RlLzAwMDYvIyVFOCVBNyVBMyVFOSVBMiU5OCVFNiU4MCU5RCVFOCVCNyVBRjEtJUU2JThDJTg3JUU5JTkyJTg4JUU2JUIzJTk1)解题思路1:指针法 1.首先设置三个变量: * `rows`:用于存放每一行的字符串的数组 * `goingDown`:用于判断字符串遍历方向是往上还是往下 * `curRow`:当前遍历字符串应当存放的行数 2.从左至右遍历字符串,`rows[curRow]=str`,如下图:  从`P`开始遍历,存储到第一行字符串,而且当前行数为0,证明当前位置在顶部,那么遍历方向一定是是向下的,所以设置`goingDown`为`true`,`curRow`加1  如上图,当遍历到第二个`P`时,已经到了底部,那么意味下一次遍历就是反方向的,那么`goingDown`为false,`curRow`就要相应减1让下一个遍历的字符存储到上一行 ## [#](https://word.jiejaitt.top/?golink=aHR0cHM6Ly9iaWFvZGlnaXQuZ2l0aHViLmlvL0xlZXRDb2RlLzAwMDYvIyVFNCVCQiVBMyVFNyVBMCU4MSVFNSVBRSU5RSVFNyU4RSVCMA==)代码实现 <pre class="wp-block-zibllblock-enlighter"><div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"><div class="enlighter-toolbar"><div class="enlighter-btn enlighter-btn-raw"></div><div class="enlighter-btn enlighter-btn-copy"></div><div class="enlighter-btn enlighter-btn-window"></div></div><div class="enlighter"><div class=""><div><span class="enlighter-text">let convert = </span><span class="enlighter-g1">(</span><span class="enlighter-text">s, nRows</span><span class="enlighter-g1">)</span><span class="enlighter-text"> =</span><span class="enlighter-g1">></span><span class="enlighter-text"> </span><span class="enlighter-g1">{</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-k1">if</span><span class="enlighter-text"> </span><span class="enlighter-g1">(</span><span class="enlighter-text">nRows </span><span class="enlighter-g1"><</span><span class="enlighter-text">= </span><span class="enlighter-n1">1</span><span class="enlighter-g1">)</span><span class="enlighter-text"> </span><span class="enlighter-k1">return</span><span class="enlighter-text"> s;</span></div></div><div class=""><div><span class="enlighter-text"> let rows = </span><span class="enlighter-m0">Array</span><span class="enlighter-g1">(</span><span class="enlighter-text">Math.</span><span class="enlighter-m3">min</span><span class="enlighter-g1">(</span><span class="enlighter-text">nRows, s.</span><span class="enlighter-m3">length</span><span class="enlighter-g1">))</span><span class="enlighter-text">.</span><span class="enlighter-m3">fill</span><span class="enlighter-g1">(</span><span class="enlighter-s0">''</span><span class="enlighter-g1">)</span><span class="enlighter-text">,</span></div></div><div class=""><div><span class="enlighter-text"> goingDown = </span><span class="enlighter-k1">false</span><span class="enlighter-text">,</span></div></div><div class=""><div><span class="enlighter-text"> curRow = </span><span class="enlighter-n1">0</span><span class="enlighter-text">,</span></div></div><div class=""><div><span class="enlighter-text"> res = </span><span class="enlighter-s0">''</span><span class="enlighter-text">;</span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-k1">for</span><span class="enlighter-text"> </span><span class="enlighter-g1">(</span><span class="enlighter-text">let i = </span><span class="enlighter-n1">0</span><span class="enlighter-text">, len = s.</span><span class="enlighter-m3">length</span><span class="enlighter-text">; i </span><span class="enlighter-g1"><</span><span class="enlighter-text"> len; i++</span><span class="enlighter-g1">)</span><span class="enlighter-text"> </span><span class="enlighter-g1">{</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> rows</span><span class="enlighter-g1">[</span><span class="enlighter-text">curRow</span><span class="enlighter-g1">]</span><span class="enlighter-text"> += s.</span><span class="enlighter-m3">charAt</span><span class="enlighter-g1">(</span><span class="enlighter-text">i</span><span class="enlighter-g1">)</span><span class="enlighter-text">;</span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-k1">if</span><span class="enlighter-text"> </span><span class="enlighter-g1">(</span><span class="enlighter-text">curRow === </span><span class="enlighter-n1">0</span><span class="enlighter-text"> </span><span class="enlighter-g0">||</span><span class="enlighter-text"> curRow === nRows - </span><span class="enlighter-n1">1</span><span class="enlighter-g1">)</span><span class="enlighter-text"> goingDown = !goingDown;</span></div></div><div class=""><div><span class="enlighter-text"> curRow += goingDown ? </span><span class="enlighter-n1">1</span><span class="enlighter-text"> </span><span class="enlighter-g0">:</span><span class="enlighter-text"> </span><span class="enlighter-n1">-1</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-g1">}</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-k1">for</span><span class="enlighter-text"> </span><span class="enlighter-g1">(</span><span class="enlighter-text">let str </span><span class="enlighter-k1">of</span><span class="enlighter-text"> rows</span><span class="enlighter-g1">)</span><span class="enlighter-text"> </span><span class="enlighter-g1">{</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> res += str</span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-g1">}</span><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"></span></div></div><div class=""><div><span class="enlighter-text"> </span><span class="enlighter-k1">return</span><span class="enlighter-text"> res</span></div></div><div class=""><div><span class="enlighter-text"></span><span class="enlighter-g1">}</span><span class="enlighter-text">;</span></div></div></div></div></pre> 最后修改:2025 年 11 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏