Skip to content

Commit 4329c4e

Browse files
committed
feat: add the solution of Count and Say(038) with kotlin.
1 parent 49c5c59 commit 4329c4e

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
| [027][027-question] | [Remove Element][027-tips] | [][027-java] | | [][027-kotlin] |
3939
| [028][028-question] | [Implement strStr()][028-tips] | [][028-java] | | [][028-kotlin] |
4040
| [035][035-question] | [Search Insert Position][035-tips] | [][035-java] | | [][035-kotlin] |
41-
| [038][038-question] | [Count and Say][038-tips] | [][038-java] | | |
41+
| [038][038-question] | [Count and Say][038-tips] | [][038-java] | | [][038-kotlin] |
4242
| [053][053-question] | [Maximum Subarray][053-tips] | [][053-java] | | |
4343
| [058][058-question] | [Length of Last Word][058-tips] | [][058-java] | | |
4444
| [066][066-question] | [Plus One][066-tips] | [][066-java] | | |
@@ -472,4 +472,5 @@
472472
[027-kotlin]: ./src/_027/kotlin/Solution.kt
473473
[028-kotlin]: ./src/_028/kotlin/Solution.kt
474474
[035-kotlin]: ./src/_035/kotlin/Solution.kt
475+
[038-kotlin]: ./src/_038/kotlin/Solution.kt
475476
[771-kotlin]: ./src/_771/kotlin/Solution.kt

src/_038/kotlin/Solution.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package _038.kotlin
2+
3+
/**
4+
* @author relish
5+
* @since 2018/04/16
6+
*/
7+
class Solution {
8+
fun countAndSay(n: Int): String {
9+
var say = "1"
10+
for (count in 1 until n) {
11+
say = say(say)
12+
}
13+
return say
14+
}
15+
16+
private fun say(say: String): String {
17+
val newSay = StringBuilder()
18+
var prev = say[0]
19+
var tCount = 0
20+
for (i in say.indices) {
21+
if (say[i] == prev) {
22+
tCount++
23+
continue
24+
}
25+
newSay.append(tCount).append(prev)
26+
prev = say[i]
27+
tCount = 1
28+
}
29+
newSay.append(tCount).append(prev)
30+
return newSay.toString()
31+
}
32+
}
33+
34+
fun main(args: Array<String>) {
35+
for (i in 1 until 10) {
36+
println(Solution().countAndSay(i))
37+
}
38+
}

tips/038/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ Output: "1211"
4343

4444
题意是数和说,根据如下序列 `1, 11, 21, 1211, 111221, ...`,求第 n 个数,规则很简单,就是数和说,数就是数这个数数字有几个,说就是说这个数,所以 `1` 就是 1 个 1:`11`,`11` 就是有 2 个 1:`21``21` 就是 1 个 2、1 个 1:`1211`,可想而知后面就是 `111221`,思路的话就是按这个逻辑模拟出来即可。
4545

46+
Java:
4647
```java
4748
class Solution {
4849
public String countAndSay(int n) {
@@ -67,6 +68,37 @@ class Solution {
6768
}
6869
```
6970

71+
kotlin(172ms/100.00%):
72+
```kotlin
73+
class Solution {
74+
fun countAndSay(n: Int): String {
75+
var say = "1"
76+
for (count in 1 until n) {
77+
say = say(say)
78+
}
79+
return say
80+
}
81+
82+
private fun say(say: String): String {
83+
val newSay = StringBuilder()
84+
var prev = say[0]
85+
var tCount = 0
86+
for (i in say.indices) {
87+
if (say[i] == prev) {
88+
tCount++
89+
continue
90+
}
91+
newSay.append(tCount).append(prev)
92+
prev = say[i]
93+
tCount = 1
94+
}
95+
newSay.append(tCount).append(prev)
96+
return newSay.toString()
97+
}
98+
}
99+
100+
```
101+
70102

71103
## 结语
72104

0 commit comments

Comments
 (0)