题目源自于Leetcode,非常简单的一道题。最重要是理解题意,知道什么是zigzag。
开始有点受题目上的排版干扰。后来发现,其实就是走的折线,如n=5:0123432101234321……一直波动。
解法:
用的vector<char>的数组分别保存每个行。之后再s.assign(v.begin(),v.end())赋值给string。
代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>;
using namespace std;
class Solution {
public:
string convert(string s, int nRows) {
if(nRows == 1)
return s;
vector<char> v[1000];
int i=0;
int row = 0;
int flag = 0;
while(i<s.length())
{
v[row].push_back(s[i]);
i++;
if(flag == 0)
{
row++;
if(row == nRows)
{
flag = 1;
row -= 2;
}
}
else
{
row--;
if(row == -1)
{
flag = 0;
row += 2;
}
}
}
string result = "";
for(int j=0;j<nRows;j++)
{
string tmp;
tmp.assign(v[j].begin(),v[j].end());
result += tmp;
}
return result;
}
};
int main()
{
string a = "PAYPALISHIRING";
Solution s;
string b = s.convert(a, 3);
cout<<b<<endl;
return 1;
}