題目要求:
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;}