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 RAnd 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"
.
这个题关键点在于找规律,并且确实是不大好找==
class Solution {
public:
string convert(string s, int numRows) {
string res = "";
if (numRows < 2 || s.size() == 0)
return s;
int val = 2 * numRows - 2;
for (int i = 0; i < numRows; ++i){
for (int j = i; j < s.size(); j += val){
res += s[j];
if (i>0 && i < (numRows - 1)){
if ((j+val-2*i)<s.size())
res += s[j+val-2*i];//关键在这
}
}
}
return res;
}
};