力扣6、Z字形变换


代码演示

思路

  • 模拟输出,找到规律就好
char * convert(char * s, int numRows){
    if (numRows == 1) return s;

    int n = strlen(s);
    char *ss = (char *)malloc(sizeof(char) * (n + 1));
    ss[n] = '\0';
    //输出第一行
    int t = 1, it = 0;
    while (t <= n) {
        //printf("%c", s[t - 1]);
        ss[it++] = s[t - 1];
        t += (numRows - 1) << 1;
    }
    int k = numRows - 2;
    for (int i = 2; i < numRows; i++) {
        t = i;
        int flag = 0;
        while (t <= n) {
            //printf("%c", s[t - 1]);
            ss[it++] = s[t - 1];
            if (k == 0) {
                t += (numRows - 1) << 1;
            } else {
                if (!flag) {
                t += k << 1;
                } else {
                    t += ((numRows - 1) << 1) - (k << 1);
                }

            }

            flag = !flag;
        }
        --k;
    }
    t = numRows;
   while (t <= n) {
       // printf("%c", s[t - 1]);
       ss[it++] = s[t - 1];
        t += (numRows - 1) << 1;
    }
    return ss;
}

文章作者: Axieyun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Axieyun !
评论
评论
  目录