题目链接
题目:
分析:
- 题意如图所示:
- 如果我们按照题意, 真的实现一个矩阵, 这样做的时间和空间复杂度很高, 所以我们可以试试看找规律, 优化一下
- 我们观察他们的下标:
如果找到下标的规律, 那么我们就不用创建矩阵, 就能找到最终结果的下一个字符是什么 - 特殊情况, 当numRows = 1时, d = -1, 不符合实际情况, 所以要单独讨论
代码:
class Solution {
public String convert(String s, int numRows) {
//特殊情况
if (numRows == 1)
return s;
StringBuilder str = new StringBuilder();
int d = 2 * numRows - 2;
int n = s.length();
//第一行
for (int i = 0; i < n; i += d) {
str.append(s.charAt(i));
}
//中间行 k表示行数
for (int k = 1; k < numRows - 1; k++) {
for (int i = k, j = d - k; i < n || j < n; i += d, j += d) {
if (i < n)
str.append(s.charAt(i));
if (j < n)
str.append(s.charAt(j));
}
}
//最后一行
for (int i = numRows - 1; i < n; i += d) {
str.append(s.charAt(i));
}
return str.toString();
}
}