ZigZag Conversion
多画几个图就明白了。
比如给定输入为:abcdef 3
则输出的Z形图为:
a e
b d f
c
若给定输入为:abcdef 4
则输出的图形为:
a
b f
c e
d
总之就是一个向下走的Z字形
而最终要得到返回的结果串,则是,从上到下,从左到右将Z形图的字符添加到string中
比如,第一种情况结果为 aebdfc
第二种情况:abfced
思路:
找规律,其实跟高中的等差数列相似,公差是2 * n - 2 ,n是行数,也就是给定输入的第二个参数。
注意考虑首尾 和 特殊 情况,这些在提交的时候就会发现。
代码:
class Solution {
public:
string convert(string s, int numRows) {
//n-2
int i;
int j;
int diff = 2*numRows - 2;
string result="";
if(numRows > 1 && s.length()>numRows)
{
for(i = 0;i<numRows;i++)
{
for(j=i;j<s.length();j+=diff)
{
result=result+s[j];//首尾
if(i>0 &&i!=numRows-1)
{
int k = j-2*i+diff;
if(k<s.length())//!!!!
{
result = result + s[k];
}
}
}
}
}
else
{
for(int i = 0 ;i<s.length(); i++)
{
result= result+s[i];
}
}
//result+='\0';
return result;
}
};