Count and Say

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.

說明:由於第n個序列的值依賴第n-1個序列的值,故用遞歸來解題。

代碼:

char* countAndSay(int n) {
    if(n == 1 || n == 0)
    {
        char *tmp = "1";
        return tmp;
    }

    char *p = countAndSay(n-1);
    char *temp = (char *)malloc(10000*n+1); //存儲第n個序列的值,由於無法知道第n個序列的值得長度,故分配得很大
    int count = 1, i = 0;

    while(*p != '\0')
    {
        while(*p == *(p+1))
        {
            count += 1;
            p++;
        }
        temp[i++] = count + '0';
        temp[i++] = *p++;
        count = 1;
    }
    temp[i] = '\0';
    return temp;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章