现在的位置: 首页 > 编程技术 > 算法学习 > 正文

leetcode ZigZag Conversion 题解

2016年04月12日 算法学习 ⁄ 共 817字 ⁄ 字号 leetcode ZigZag Conversion 题解已关闭评论 ⁄ 阅读 1098 次

https://leetcode.com/problems/zigzag-conversion/

这道题主要是要你找规律,然后用计算机语言把你找到的规律表述出来。如下图:

leetcode ZigZag Conversion 题解

第一个 表格是原始的zigzag,第二个是变形,这样做不影响结果,但是可以保证每行都有numRows-1个字符(除最后一行)。偶数列正序,奇数列倒序。然后遍历整个二维的数组。同时需要注意用StringBuilder代替String和numRows==1的情况。

	public String convert(String s, int numRows) {
		if (s == null || s.length() == 0 || s.length() == 1 || numRows == 1) {
			return s;
		}
		StringBuilder temp = new StringBuilder();
		for (int y = 0; y < numRows; y++) {
			for (int x = 0; x < (int) Math.ceil((double) s.length() / (double) (numRows - 1)); x++) {
				if (getCharByXY(x, y, s, numRows) != null) {
					temp.append(getCharByXY(x, y, s, numRows));
				}
			}
		}
		return temp.toString();
	}

	public Character getCharByXY(int x, int y, String s, int numRows) {
		if (x % 2 == 0) {
			if (y != numRows - 1 && (numRows - 1) * x + y < s.length())
				return s.charAt((numRows - 1) * x + y);
			return null;
		} else {
			if (y != 0 && (numRows - 1) * x + numRows - 1 - y < s.length())
				return s.charAt((numRows - 1) * x + numRows - 1 - y);
			return null;
		}
	}

抱歉!评论已关闭.