LeetCode 6. ZigZag Conversion

 输入是一个共有nRows行的,按照Z型读取的字符串:即从上往下,再斜上;从上往下,再斜上;从上往下,再斜上……

可以看出,“从上往下,再斜上”即为2*nRows-2的周期。

根据此周期,可以恢复出nRows行字符串,将这些字符串拼接在一起即可。


代码:

class Solution 
{
public:
    string convert(string s, int nRows) 
    {
		if (nRows == 1)
		{
			return s;
		}

    	string ret;
		vector<string> rows(nRows);
		int interval = 2*nRows-2;

		for (size_t i = 0; i < s.size(); ++ i)
		{
			if (i % interval < nRows)
			{
				rows[i%interval] += s[i];
			} else
			{
				rows[nRows-1-(i%interval-nRows+1)] += s[i];
			}
		}
		for (size_t i = 0; i < nRows; ++ i)
		{
			ret += rows[i];
		}

		return ret;
    }
};


你可能感兴趣的:(LeetCode,C++,conversion,ZigZag)