Leetcode: 6. ZigZag Conversion

Description

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

Example

P   A   H   N
A P L S I I G
Y   I   R

And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

思路

  • 这个题好像也没有什么简便方法,找规律吧

代码

  • 时间复杂度:O(n)
class Solution {
public:
   string convert(string s, int numRows) {
		int len = s.size();
		if (numRows <= 1 || len <= 1)  return s;

		string res(s);

		int countX = 2 * numRows - 2;
		int countY = 0;
		int index = 0;

		int tmp = numRows;
		int k = 0;
		while (tmp > 0){

			if (countY == 0){
				int i = index;
				countX = numRows * 2 - 2;
				while (i < len){
					res[k++] = s[i];
					i = i + countX;
				}
				index++;
				countX -= 2;
				countY += 2;
			}
			else if (countX != 0 && countY != 0){
				int i = index;
				while (i < len){
					res[k++] = s[i];
					i = i + countX;
					if (i < len){
						res[k++] = s[i];
						i = i + countY;
					}
				}
				index++;
				countX -= 2;
				countY += 2;
			}
			else if (countX == 0){
				int i = index;
				countX = numRows * 2 - 2;
				while (i < len){
					res[k++] = s[i];
					i = i + countX;
				}
				index++;
				countX -= 2;
				countY += 2;
			}
			tmp--;
		}

		return res;
	}
};
posted @ 2017-05-04 21:20  JeffLai  阅读(154)  评论(0编辑  收藏  举报