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