LeetCode38 Count and Say(C语言解决)

题目要求:
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, …

1 is read off as “one 1” or 11.
11 is read off as “two 1s” or 21.
21 is read off as “one 2, then one 1” or 1211.
Given an integer n, generate the nth sequence.

Note: The sequence of integers will be represented as a string.

使用C语言解决,与java语言相比确实有些不好处理,但是效率确实高了很多.
只要思路与前面使用java解决的方式类似.

char* countAndSay(int n) {

    if(n == 1) return "1";

    char * cur = malloc(2);
    char * temp;
    cur[0] = '1';
    cur[1] = 0;

    int len, idx, j, count;
    for(int i = 2; i <= n; i++) {

        len = strlen(cur);
        temp = malloc(3 * len);
        memset(temp, 0, 3 * len);
        count = 1;
        for(idx = 1, j = 0; idx < len; idx++) {
            if(cur[idx] == cur[idx - 1]) count++;
            else {
                temp[j++] = '0' + count;
                temp[j++] = cur[idx - 1];
                count = 1;
            }
        }
        temp[j++] = '0' + count;
        temp[j] = cur[len - 1];
        free(cur);
        cur = temp;
    }
    return cur;
}

你可能感兴趣的:(leetcode)