当前位置:实例文章 » C#开发实例» [文章]LeetCode-C#-0006.N字形变换

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; // 如果只有一行,直接返回原字符串 List rows = 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. 返回最终结果。

其他信息

其他资源

Top