题目

Z字形变换 - 图1

解题思路

1、下面代码的第一个for循环把一个List分成多份空字符串,具体几份取决于numRows,然后每一份代表每一行的字符串

2、第二个for循环来判断每一个字符应该放在哪一行,拼接上去

3、第三个for循环遍历List把每一行字符串拼接起来就是结果

4、curRow += goingDown ? 1 : -1; 这种写法很骚

代码

  1. class Solution {
  2. public String convert(String s, int numRows) {
  3. if (numRows == 1) return s;
  4. List<StringBuilder> rows = new ArrayList<>();
  5. for (int i = 0; i < Math.min(numRows, s.length()); i++)
  6. rows.add(new StringBuilder());
  7. int curRow = 0;
  8. boolean goingDown = false;
  9. for (char c : s.toCharArray()) {
  10. rows.get(curRow).append(c);
  11. if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
  12. curRow += goingDown ? 1 : -1;
  13. }
  14. StringBuilder ret = new StringBuilder();
  15. for (StringBuilder row : rows) ret.append(row);
  16. return ret.toString();
  17. }
  18. }