注意题目的字符串排列方式,即题目中所说的Z字型。
实际上是一直向下到底部,再斜着向右到顶部,再向下到底部...一直重复到字符串结束.
P A H N
A P L S I I G
Y I R
根据这个规律,模拟这种移动方式。
import java.util.ArrayList; import java.util.List; public class Q6 { public String convert(String s, int numRows) { if (numRows == 1) return s; List<StringBuilder> rows = new ArrayList<>(); // numRows行字符串,使用StringBuilder方便后续的修改 for (int i = 0; i < Math.min(numRows,s.length()); i++) { rows.add(new StringBuilder()); } int curRow = 0; boolean goingDown = false; //字符的规律,从顶部到底部,然后改变方向,从底部到顶部,再改变方向。 for (char c :s.toCharArray()) { rows.get(curRow).append(c); //第一行或最后一行 改变方向 if (curRow == 0 || curRow == numRows-1) goingDown = !goingDown; curRow += goingDown?1:-1; } StringBuilder ret = new StringBuilder(); for (StringBuilder row :rows) ret.append(row); return ret.toString(); } }