您的位置:首页 > 其它

6.ZigZag Conversion(Graph, traverse)

2015-07-15 09:13 344 查看
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   R

And 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"
.

思路:图的遍历,先纵向,再横向。

图用string数组存储。

如果nRows=4,注意短的那列是倒序。

P I N

A L S I G

Y A H R

P I

如果nRows=2,全部是正序。

P Y ...

A P ...

class Solution {
public:
string convert(string s, int numRows) {
string sArray[numRows];
int pChar = 0; //pointer to s
int pRow = 0; //pointer to indicate row number

while(1){
pRow = 0;
while(pRow < numRows && pChar != s.length()){ //traverse first colomn
sArray[pRow++] += s[pChar++];
}
if(pChar == s.length()) return getReturnStr(sArray,numRows);

pRow = numRows-2;
while(pRow > 0 && pChar != s.length()){
sArray[pRow--] += s[pChar++];
}
if(pChar == s.length()) return getReturnStr(sArray,numRows);
}
}
string getReturnStr(string* sArray, int numRows){
string ret = "";
for(int i = 0; i < numRows; i++){
ret += sArray[i];
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: