程式語言 - LeetCode - C - 394. Decode String



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

題目:


解答:

char* decodeString(char* s)
{
    #define MAX_SIZE (30 * 300)

    int i = 0;
    int val = 0;
    int r_idx = 0;
    int num_idx = 0;
    int buf_idx = 0;
    int size = strlen(s);
    int num[30] = { 0 };
    char buf[30][300] = { 0 };
    char *r = calloc(MAX_SIZE, 1);

    for (i = 0; i < size; i++) {
        if (isdigit(s[i])) {
            val = (val * 10) + (s[i] - '0');
            continue;
        }

        switch (s[i]) {
        case '[':
            num[num_idx++] = val;
            strcat(buf[buf_idx++], r);

            val = 0;
            r_idx = 0;
            memset(r, 0, MAX_SIZE);
            break;
        case ']':
            num_idx -= 1;
            buf_idx -= 1;

            for (; num[num_idx] > 0; num[num_idx]--) {
                strcat(buf[buf_idx], r);
            }
            strcpy(r, buf[buf_idx]);
            buf[buf_idx][0] = 0;

            r_idx = strlen(r);
            break;
        default:
            r[r_idx++] = s[i];
            break;
        }
    }

    return r;
}