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