1. 程式人生 > >LeetCoe 38. 報數 Count and Say(C語言)

LeetCoe 38. 報數 Count and Say(C語言)

題目描述:

報數序列是一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:

  1. 1
  2. 11
  3. 21
  4. 1211
  5. 111221

1 被讀作 “one 1” (“一個一”) , 即 11。
11 被讀作 “two 1s” (“兩個一”), 即 21。
21 被讀作 “one 2”, “one 1” (“一個二” , “一個一”) , 即 1211。
給定一個正整數 n(1 ≤ n ≤ 30),輸出報數序列的第 n 項。
注意:整數順序將表示為一個字串。

示例 1:

輸入: 1
輸出: “1”

示例 2:

輸入: 4
輸出: “1211”

題目解答:

方法1:暴力法

每次儲存上一個次報數的字串,當前的根據上一個報數字符串計算。需要從第一個遍歷到第n個。
執行時間0ms,程式碼如下。

char* countAndSay(int n) {
    char* last = (char*)calloc(5000, sizeof(char));
    char* now = (char*)calloc(5000, sizeof(char));
    last[0] = '1';
    if(n == 1) {
        free(now);
        return
last; } int i = 1, j = 0, count = 0, index = 0, len = 1;; while(i < n) { count = 1; index = 0; for(j = 0; j < len; j++) { if(last[j] == last[j + 1]) count++; else { now[index++] = '0' + count; now[
index++] = last[j]; count = 1; } } now[index] = '\0'; len = index; memcpy(last, now, index * sizeof(char)); i++; } free(last); return now; }