ZigZag Conversion 题解
题目来源:ZigZag Conversion
> 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) 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".
解题思路:
对勾的形式一个周期~hash一下到具体哪一个row~
0 0 0
1 5 1 5
2 4 2 4
3 3
string convert(string s, int nRows)
{
if(nRows == 1) return s;
vector<vector<char> > rows(nRows);
int T = nRows + nRows - 2;
for(int i = 0; i < s.length(); i++)
{
int bucket = i % T;
bucket = bucket >= nRows ? (T - bucket) : bucket;
rows[bucket].push_back(s[i]);
}
string result="";
for(int i = 0; i < nRows; i++)
{
for(int j = 0; j < rows[i].size(); j++)
result += rows[i][j];
}
return result;
}
Last updated
Was this helpful?