本人先讲自己比较笨的 方法
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(); } }