Содержание

38. Count and Say

Задача

Последовательность count-and-say это последовательность целых чисел:

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

1 читаетс как “одна единицы” или 11. 11 читается как “две единицы” или 21. 21читается как “одна двойка, одна единица” или 1211.

пример 1

1
2
3
Input: 1
Output: "1"
Explanation: This is the base case.

пример 2

1
2
3
Input: 4
Output: "1211"
Explanation: For n = 3 the term was "21" in which we have two groups "2" and "1", "2" can be read as "12" which means frequency = 1 and value = 2, the same way "1" is read as "11", so the answer is the concatenation of "12" and "11" which is "1211".

Решение

Считать похожие элементы

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
func countAndSay(n int) string {
    res := "1"
    for idx:=2;idx<=n;idx++ {
        count:=1
        cur:=res[0]
        tmp:=""
        for jdx:=1;jdx<len(res);jdx++ {
            if res[jdx]==cur {
                count++
            } else {
                tmp =tmp+strconv.Itoa(count)+string(cur)
                count=1
                cur=res[jdx]
            }
        }
        tmp =tmp+strconv.Itoa(count)+string(cur)
        res = tmp
    }
    
    return res
}