这题重点就在好好读题找规律了,整个Z字形阵分为n
行,首行和尾行分别是0
和n-1
开头,2n-2
为公差。
中间每行都是一样的,但是中间每行需要改成两部分,第一部分是"直线部分",也就相当于下面图中的1 7 13 2 8 14
等这种位置,它们是以n
开头,2n-2
为公差。
第二部分则是位于“斜线”上的位置,例如4 5 10 11 16 17
等这种位置,他们是2n-2-i
为开头,同样也是2n-2
为公差
6. Z 字形变换
class Solution {
public:
string convert(string s, int n) {
string res;
//特判一下n为1的时候,因为n为1的时候,2n-2就为0,下面for循环会进入死循环
if(n == 1) return s;
for(int i = 0;i < n;i ++ )
{
//第一行和最后一行特殊
if(i == 0 || i == n - 1)
{
for(int j = i;j < s.size();j += 2*n-2)
{
res += s[j];
}
}else{
//中间行的
for(int j = i,k = 2*n-2-i;j<s.size()||k<s.size();j+=2*n-2,k+=2*n-2){
//记得先加j开头的 再加k开头的
if(j < s.size()) res += s[j];
if(k < s.size()) res += s[k];
}
}
}
return res;
}
};