题目原址:点击打开链接
题目描述: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)And then read line by line:P A H N A P L S I I G Y I R
"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"
.
一开始并不是很明白题目意思,查看了一下大神的解释后就明白了:
The problem statement itself is unclear for many. Especially for 2-row case. "ABCD", 2 --> "ACBD". The confusion most likely is from the character placement. I would like to extend it a little bit to make ZigZag easy understood.The example can be written as follow:
- P.......A........H.......N
- ..A..P....L..S....I...I....G
- ....Y.........I........R
Therefore, <ABCD, 2> can be arranged as:
- A....C
- ...B....D
跟着大神的思路写了代码,思路基本和他的一样。我的代码:class Solution { public: string convert(string s, int nRows) { if(nRows==1)return s; int l=s.size(); int r=0,t=1; string *ss = new string[nRows]; for(int i=0;i<l;i++){ ss[r].push_back(s[i]); if(r==0)t=1; else if(r==nRows-1)t=-1; r+=t; } string sss=""; for(int i=0;i<nRows;i++){ sss.append(ss[i]); } delete[] ss; return sss; } };