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".
模拟题,只要按照题目意思做就可以了,注意细节的处理,先从1到numRows -1行,然后从numRows-2行到0行,这样处理,思路比较的明朗。
class Solution {
public:
//纯模拟题
string convert(string s, int numRows) {
int len = s.size();
if(len < 1 || len <= numRows || numRows <= 1)
return s;
vector<string> rows(numRows, "");
rows[0].push_back(s[0]);
int i = 1;
while(i < len)
{
//记录1 - numRows-1 行
for(int j = 1; i < len && j < numRows; ++j)
{
rows[j].push_back(s[i]);
++i;
}
for(int j = numRows - 2; i < len && j >= 0; --j)
{
rows[j].push_back(s[i]);
++i;
}
}
string ans = rows[0];
for(int i = 1; i < numRows; ++i)
ans += rows[i];
return ans;
}
};
本文介绍了一种将字符串以Z字形方式分布在指定数量的行上,并按行读取的算法实现。通过模拟的方式,使用C++代码展示了如何将输入字符串PAYPALISHIRING转换为PAHNAPLSIIGYIR。该算法适用于编程竞赛和技术面试。
1754

被折叠的 条评论
为什么被折叠?



