solution.md 3.0 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
# 外观数列

<div class="notranslate">
    <p>给定一个正整数 <code>n</code> ,输出外观数列的第 <code>n</code> 项。</p>

    <p>「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。</p>

    <p>你可以将其视作是由递归公式定义的数字字符串序列:</p>

    <ul>
        <li><code>countAndSay(1) = "1"</code></li>
        <li><code>countAndSay(n)</code> 是对 <code>countAndSay(n-1)</code> 的描述,然后转换成另一个数字字符串。</li>
    </ul>

    <p>前五项如下:</p>

    <pre>
    1.     1
    2.     11
    3.     21
    4.     1211
    5.     111221
    第一项是数字 1 
    描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 "11"
    描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 "21"
    描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"
    描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"
    </pre>

    <p>要 <strong>描述</strong> 一个数字字符串,首先要将字符串分割为 <strong>最小</strong> 数量的组,每个组都由连续的最多 <strong>相同字符</strong>
        组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。</p>

    <p>例如,数字字符串 <code>"3322251"</code> 的描述如下图:</p>
    <img alt=""
        src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0038.Count%20and%20Say/images/countandsay.jpg"
        style="width: 581px; height: 172px;" />
    <ul>
    </ul>

    <p>&nbsp;</p>

    <p><strong>示例 1:</strong></p>

    <pre><strong>输入:</strong>n = 1
<strong>输出:</strong>"1"
<strong>解释:</strong>这是一个基本样例。
</pre>

    <p><strong>示例 2:</strong></p>

    <pre><strong>输入:</strong>n = 4
<strong>输出:</strong>"1211"
<strong>解释:</strong>
countAndSay(1) = "1"
countAndSay(2) = 读 "1" = 一 个 1 = "11"
countAndSay(3) = 读 "11" = 二 个 1 = "21"
countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"
</pre>

    <p>&nbsp;</p>

    <p><strong>提示:</strong></p>

    <ul>
        <li><code>1 &lt;= n &lt;= 30</code></li>
    </ul>
</div>

## template

```java
class Solution {
	public String countAndSay(int n) {
		String pre = "1";
		for (int i = 1; i < n; i++) {
			StringBuilder temp = new StringBuilder();
			char c = pre.charAt(0);
			int cnt = 1;
			for (int j = 1; j < pre.length(); j++) {
				char cc = pre.charAt(j);
				if (c == cc) {
					cnt++;
				} else {
					temp.append(cnt).append(c);
					cnt = 1;
					c = cc;
				}
			}
			temp.append(cnt).append(c);
			pre = temp.toString();
		}
		return pre;
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```