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".
/*n=numRows
Δ=2n-2 1 2n-1 4n-3
Δ= 2 2n-2 2n 4n-4 4n-2
Δ= 3 2n-3 2n+1 4n-5 .
Δ= . . . . .
Δ= . n+2 . 3n .
Δ= n-1 n+1 3n-3 3n-1 5n-5
Δ=2n-2 n 3n-2 5n-4
*/
题目乍一看不知道啥意思。
class Solution {
public:
string convert(string s, int numRows) {
string result = "";
if(numRows == 1)
return s;
int step1,step2;
int len = s.size();
for(int i = 0; i < numRows; ++i)
{
step1 = (numRows-i-1)*2;
step2 = 2*i;
int pos = i;
if(pos < len)
result += s.at(pos);
while(1)
{
pos += step1;
if(pos >= len)
break;
if(step1) //不能省,
result += s.at(pos);
pos += step2;
if(pos >= len) //是>= 而不是>
break;
if(step2)
result += s.at(pos);
}
}
return result;
}
};
本文介绍了一种将字符串以Z形模式排列并按行读取的方法。通过提供的代码示例,展示了如何实现这一转换过程,即将输入字符串PAYPALISHIRING按照指定行数进行Z形排列,并最终按行顺序读取输出。
1747

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



