# [38] 报数 简单

# 题解

/*
 * @lc app=leetcode.cn id=38 lang=javascript
 *
 * [38] 报数
 *
 * https://leetcode-cn.com/problems/count-and-say/description/
 *
 * algorithms
 * Easy (51.13%)
 * Likes:    263
 * Dislikes: 0
 * Total Accepted:    38.3K
 * Total Submissions: 74.7K
 * Testcase Example:  '1'
 *
 * 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
 *
 * 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"
 *
 *
 */
/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
  if (n === 1) return '1';
  const str = countAndSay(n - 1);

  let count = 1;
  let res = '';

  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      count++;
      continue;
    } else {
      res += `${count}${str[i]}`;
      count = 1;
    }
  }

  return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70