本人先讲自己比较笨的 方法
package homework;
public class Main {
public String convert(String s, int numRows) {
int length = s.length(), x = 0, y = 0;
String arr[][] = new String[numRows][20];
int i = 0;
if(numRows==1) {//这个部分是自己后面加上去的 因为numRow==1的话 else部分不适合
return s;
}
else { //方法的话 是采用 二维数组进行存放
while (i < length) {
arr[x][y] = String.valueOf(s.charAt(i));//先第一步处理竖
// System.out.print(s.charAt(i)+" ");//查看每一步处理的字符串
// System.out.println(arr[x][y]);
i++;
x++;
if (x == numRows - 1) {//竖处理完之后 跳入这个循环 处理斜的 处理完斜行后跳出来
while (x != 0 && i < length) {
arr[x][y] = String.valueOf(s.charAt(i));
// System.out.print(s.charAt(i)+" ");
// System.out.println(arr[x][y]);
x--;
y++;
i++;
}
}
}
}
String str = "";//这个没什么好说的就读数据
for (int i2 = 0; i2 < numRows; i2++) {
for (int x2 = 0; x2 < 20; x2++) {
if (arr[i2][x2] != null && arr[i2][x2] != "")
str = str + arr[i2][x2];
}
}
return str;
}
public static void main(String[] args) {//测试用例
Main m = new Main();
String s = "AB";
int numRows = 1;
System.out.println(m.convert(s, numRows));
}
}
class Solution {
public String convert(String s, int n) { //首尾两行都是一个等差数列 中间都是两个等差数列相差在一起
if (n == 1)
return s;
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < n; i++) {
if (i == 0 || i == n - 1) {
for (int j = i; j < s.length(); j += 2 * (n - 1)) {
sb.append(s.charAt(j));
}
} else {
for (int j = i, k = 2 * (n - 1) - i; j < s.length()
|| k < s.length(); j += 2 * (n - 1), k += 2 * (n - 1)) {
if (j < s.length())
sb.append(s.charAt(j));
if (k < s.length())
sb.append(s.charAt(k));
}
}
}
return sb.toString();
}
}