LeetCode-C#-0006.N字形变换
发布人:shili8
发布时间:2024-02-03 04:16
阅读次数:101
题目描述:
将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z字形排列。
示例:
输入:s = "LEETCODEISHIRING", numRows =3输出:"LCIRETOESIIGEDHN"
解释:
L C I RE T O E S I I GE D H N代码示例:
csharppublic class Solution { public string Convert(string s, int numRows) { if (numRows ==1) return s; // 如果只有一行,直接返回原字符串 Listrows = new List (); // 创建一个StringBuilder的列表,用于存储每一行的字符 for (int i =0; i < Math.Min(numRows, s.Length); i++) { rows.Add(new StringBuilder()); // 初始化每一行的StringBuilder } int curRow =0; // 当前行数 bool goingDown = false; // 标记是否向下移动 foreach (char c in s) { rows[curRow].Append(c); // 将当前字符添加到对应行的StringBuilder中 if (curRow ==0 || curRow == numRows -1) goingDown = !goingDown; // 到达边界时改变移动方向 curRow += goingDown ?1 : -1; // 根据移动方向更新当前行数 } StringBuilder result = new StringBuilder(); // 创建一个新的StringBuilder用于存储最终结果 foreach (StringBuilder row in rows) { result.Append(row.ToString()); // 将每一行的字符添加到最终结果中 } return result.ToString(); // 返回最终结果 } }
代码注释:
1. 首先判断特殊情况,如果只有一行,则直接返回原字符串。
2. 创建一个StringBuilder的列表rows,用于存储每一行的字符。
3. 遍历字符串s,将每个字符添加到对应行的StringBuilder中。
4. 根据Z字形排列的规律,当到达边界时改变移动方向,更新当前行数。
5. 创建一个新的StringBuilder result,将每一行的字符添加到result中。
6. 返回最终结果。