这题我自己写出了一个时间复杂度O(n),但空间复杂度较高的解法,就是模拟Z字形填空二维矩阵,然后按行读取出不为’\0’的字符,所以空间复杂度较高。这类题解决之前需要注意特殊输入,检查代码完整性
比如如果numRows为1和0的特殊情况。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string convert(string s, int numRows) {
string res="";
if (s.length() == 0||numRows==0)
return res;
int lens;
if (numRows == 1)
return s;
else
{
lens = (s.length() / (2 * numRows - 2) + 1)*(numRows - 1);
}
vector<vector<char>> zig(numRows, vector<char>(lens));
bool flag = true;
int p = 0, q = 0;
for (int i = 0; i < s.length(); ++i)
{
zig[p][q] = s[i];
if (flag)
{
if (p >= (numRows - 1))
{
flag = false;
p--;
q++;
}
else
{
p++;
}
}
else
{
if (p == 0)
{
flag = true;
p++;
}
else
{
p--;
q++;
}
}
}
for (int i = 0; i < zig.size(); ++i)
{
for (int j = 0; j < zig[0].size(); ++j)
{
if (zig[i][j] != '\0')
res = res + zig[i][j];
}
}
return res;
}
int main()
{
string s;
int numRows;
cin >> s >> numRows;
cout << convert(s,numRows) << endl;
system("pause");
return 0;
}