public static String convert(String s, int numRows) {
/*
思路:Z字形变换 abcdef
a e 这里可以先想象成:从 a 开始向下走
b d f 到了指定了 numRows行时变方向 向上走
c 在到了 起始位置在变一次方向
boolean goingDown = false; true表示向下走 , false向上走
*/
if (numRows == 1 ) return s;
// 创建一个行数组
List<StringBuilder> rows = new ArrayList<>();
/*
这里可以完全根据行数来添加
但是如果 出现 "ab" 3 行数 > 字符串
那么就会多创建出StringBuilder 占用空间
*/
for (int i = 0; i < Math.min(numRows, s.length()); i++)
rows.add(new StringBuilder());
int curRow = 0;// curRow 存放的下标,开始为 0
boolean goingDown = false; //默认向上走
//根据 根据字符串的方法toCharArray() 拆分成char[] 在foreach遍历
for (char c : s.toCharArray()) { //每次遍历一个 字符串 c
rows.get(curRow).append(c);//得到第 curRow 个元素.append追加字符串 c
// 只有在起始位置,还有 numRows(行数) - curRow(数组下标) = 1时 需要 边方向
// 因为 curRow 数组下标 起始值为0
if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
// 定义一个 ret 用来拼接所有的字符串
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) ret.append(row);
return ret.toString();
}
LeetCode第6题Z字形变换
最新推荐文章于 2024-06-11 20:33:14 发布