c-solution

1.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;
 }

2.performance

Last updated