Fork me on GitHub

6.Zigzag Z 字形变换

本人先讲自己比较笨的 方法

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();
	}
}
posted @ 2019-07-08 10:30  cznczai  阅读(254)  评论(0编辑  收藏  举报