程式語言 - LeetCode - C - 6. Zigzag Conversion



參考資訊:
https://www.cnblogs.com/grandyang/p/4128268.html

題目:


解答:

char* convert(char *s, int numRows)
{
    int i = 0;
    int j = 0;
    int pos = 0;
    int len = strlen(s);
    int interval = (numRows << 1) - 2;
    char *r = NULL;
    char *cur = NULL;

    if (numRows <= 1) {
        return s;
    }

    // interval = (numRows * 2) - 2;
    // sub-interval = j + interval - (i * 2)

    r = calloc(len + 1, 1);
    cur = r;
    for (i = 0; i < numRows; i++) {
        for (j = i; j < len; j+= interval) {
            *cur++ = s[j];

            pos = j + interval - (i << 1);
            if ((i != 0) && (i != (numRows - 1)) && (pos < len)) {
                *cur++ = s[pos];
            }
        }
    }
    *cur = 0;
    return r;
}