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"
.
» Solve this problem
直接搞!
class Solution {
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (nRows == 1) {
return s;
}
string temp[nRows];
int idx = -1, step = 1;
for (int i = 0; i < s.size(); i++) {
idx += step;
if (idx == nRows) {
idx = nRows - 2;
step = -1;
}
else if (idx == -1) {
idx = 1;
step = 1;
}
temp[idx] += s[i];
}
string ans = temp[0];
for (int i = 1; i < nRows; i++) {
ans += temp[i];
}
return ans;
}
};
本文介绍了一种将字符串按照指定行数以Z形模式排列并读取的方法,并提供了相应的C/C++代码实现。
132





