Description:
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"Zigzag:即循环对角线结构(
| 0 | 8 | 16 | |||||||||
| 1 | 7 | 9 | 15 | 17 | |||||||
| 2 | 6 | 10 | 14 | 18 | |||||||
| 3 | 5 | 11 | 13 | 19 | |||||||
| 4 | 12 | 20 |
)
算法思想:
向下循环
斜对角循环:gap=nRows-2(去除端点)
C++ Implements:
string convert(string s, int numRows) {
if(numRows==1) return s;
string str[numRows];
int i=0,gap=numRows-2;
while(i<s.size()){
for(int j=0;j<numRows&&i<s.size();j++){
str[j]+=s[i++];
}
for(int j=gap;j>0&&i<s.size();j--){
str[j]+=s[i++];
}
}
string res="";
for(int j=0;j<numRows;j++){
res+=str[j];
}
return res;
}
本文介绍了一种将字符串以Zigzag形式排列并按行读取的算法实现。通过C++代码展示了如何将输入字符串按照指定行数进行Zigzag转换,并提供了详细的步骤解析。
9005

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



