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".
Solutions:
第一行和最后一行单独对待,其两字符之间相距2×(numRows-1)。
对于中间的第i(从0计数)行,若上一次两字符之间距离相距2×(numRows-i-1),则本次相距则为2×i。
class Solution {
public:
string convert(string s, int numRows) {
string ret;
if(numRows >= s.size() || numRows == 1) {
return s;
}
int i=0, loc=0;
int gap=2*(numRows-1);
for(loc=0; loc<s.size(); loc+=gap) {
ret+=s[loc];
}
for(i=1; i<numRows-1; ++i) {
bool flag=false;
for(loc=i; loc<s.size(); ){
if(flag == false) {
ret+=s[loc];
loc+=2*(numRows-i-1);
flag=true;
} else {
ret+=s[loc];
loc+=2*i;
flag=false;
}
}
}
for(loc=numRows-1; loc<s.size(); loc+=gap) {
ret+=s[loc];
}
return ret;
}
};
本文介绍了一种将字符串按照指定行数以Z形模式排列并读取的方法,并提供了相应的C++代码实现。
&spm=1001.2101.3001.5002&articleId=45893663&d=1&t=3&u=db402e7d91ca4bada9ad4585d6f21bb2)
1万+

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



