题目
按行访问
public class Main {
public static void main(String[] args) {
Main main = new Main();
main.convert("A", 1);
}
public String convert(String s, int numRows) {
if (s.length() == 1 || numRows == 1) {
return s;
}
// 根据numRows得到基准
// 例如abcdefgh的基准如下
// a
// b f
// c e
// d
// 之后的g可以由a得到, f由b得到, 以此类推
// 除了第一行和最后一行 每一行由两个字符作为基准
int indexOffset = 2 * numRows - 2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numRows; i ++) {
StringBuilder tempStr = new StringBuilder();
if (i == 0 || i == numRows - 1) {
int tempIndex = i;
while (tempIndex < s.length()) {
tempStr.append(s, tempIndex, tempIndex + 1);
tempIndex += indexOffset;
}
} else {
int tempIndex1 = i;
int tempIndex2 = i + (numRows - i - 1) * 2;
while (tempIndex1 < s.length() || tempIndex2 < s.length()) {
if (tempIndex1 < s.length()) {
tempStr.append(s, tempIndex1, tempIndex1 + 1);
tempIndex1 += indexOffset;
}
if (tempIndex2 < s.length()) {
tempStr.append(s, tempIndex2, tempIndex2 + 1);
tempIndex2 += indexOffset;
}
}
}
sb.append(tempStr.toString());
}
return sb.toString();
}
}
基本思路
-
根据题目发现每一行的字符对应在字符串中的索引是有规律的, 这个规律和numsRow有关
-
除了首尾两行, 中间行的规律是两个字符一族相关的.
// 例如abcdefgh的基准如下 // a // b f // c e // d // 之后的g可以由a得到, f由b得到, 以此类推 // 除了第一行和最后一行 每一行由两个字符作为基准 -
每一行字符索引之间的规律, 由索引距离得到, 不要瞎赋予规律