Leetcode--Java--6. Z 字形变换
题目描述
样例描述
思路
标记变量巧用 + 模拟行索引变化
- 所给字符串时按Z字型存储的,转换成按指定行的字符串,不难看出,行索引的变化是从0到numRows - 1,然后再变化到0,又到…反复进行的
- 变化的时刻就是第一行和最后一行,此处可以用变量flag来处理
- 递增时,行数加一,递减时,行数减一,因此flag可以设置为1,然后到第一行或者最后一行时将flag取反即可
- 可以提前开好每一行的存储(这里用StringBuilder很方便),然后统一放到一个list里面
- 最后将每一行的结果拼接在一起就是最终答案
代码
class Solution { public String convert(String s, int numRows) { List<StringBuilder> rows = new ArrayList<>(); for (int i = 0; i < numRows; i ++ ) { rows.add(new StringBuilder()); } if (numRows < 2) { return s; } int r = 0, flag = -1; for (char c: s.toCharArray()) { rows.get(r).append(c); //第一行或者最后一行要变 if(r == 0 || r == numRows - 1) { flag = -flag; } r += flag; } String res = ""; for (StringBuilder sb: rows) { res += sb.toString(); } return res; } }