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"
.
题意:就是给出层数,然后按锯齿形正弦波保存字符串。。。类似给数据加密。
这个题我个人觉得挺有意思的,但没能解决。。。看了别人的题解,有一个让我很喜欢的,算法真的是太棒了。。
代码十分简洁易懂,第9行的细节处理真的是太精彩了:
class Solution { public: string convert(string s, int numRows) { string res=""; if(numRows==1) return s; for(int i=0; i < numRows; i++){ for(int j=0, k=i; k < s.size(); j++){ res += s[k]; k += ((i==0 || (j%2==0)) && (i!= numRows-1) )? 2*(numRows-i-1) : 2*i; } } return res; } };
题目来源:ZigZag Conversion
代码来源:Solution