2.Count and Say
1.Question

2.想法
看幾層就跑幾次, 每次比較同一層間前後的字元是否相同, 並儲存counter.
3. Solution
C solution
char* countAndSay(int n) { char * ary = (char *)malloc(5000 * sizeof(char)); char * oldAry = (char *)malloc(5000 * sizeof(char)); n = n -1; oldAry[0] = '1'; ary[0] = '1'; int round = 0; int count = 1; int index = 0; int len = 1; while(round < n){ round = round +1; index = 0; for(int i = 0 ; i < len; i++){ if (oldAry[i] == oldAry[i + 1] ) { //計算重複的數量 count = count + 1; }else{ //數量 -> 將數字(1~9)轉到字元 ary[index++] = count+'0'; //什麼數字 ary[index++] = oldAry[i]; count = 1; } } //上一次的字元數量 len = index ; //結束字元 ary[index++] = '\0'; memcpy(oldAry, ary, len); } free(oldAry); return ary; }

JavaScript solution
var countAndSay = function(n) {
res="" oldAry = []; oldAry.push(1) ary = []; ary.push(1) round = 0; count = 1; index = 0; len = 1; while(round < n-1){ round++; index = 0 for(i = 0 ; i < len; i++){ if (oldAry[i] === oldAry[i+1] ) { count++ }else{ ary[index++] = count; ary[index++] = oldAry[i]; count = 1; } } len = index ; oldAry=ary.slice(0) } ary.forEach(function(element, index, array){ res+=element }) return res };

Last updated
Was this helpful?