Задача: 38. Count and Say
Сложность: medium
Последовательность "считай и скажи" (countAndSay) строится рекурсивно:
- countAndSay(1) = "1"
- countAndSay(n) — это кодирование длин серий из countAndSay(n - 1).
Пример кодирования длин серий (RLE):
- "3322251" → "23321511"
Для заданного n верните n-й элемент последовательности.
Пример:
Input: n = 4
Output: "1211"
👨💻 Алгоритм:
1⃣Начать с s = "1".
2⃣Для каждого шага n-1 раз:
- Пройти по s, группируя одинаковые символы.
- Для каждой группы записать количество и сам символ.
- Обновить s.
3⃣Вернуть итоговую строку.
😎 Решение:
public class Solution {
public string CountAndSay(int n) {
string s = "1";
for (int i = 0; i < n - 1; i++) {
StringBuilder current = new StringBuilder();
for (int j = 0; j < s.Length; j++) {
int count = 1;
while (j < s.Length - 1 && s[j] == s[j + 1]) {
j++;
count++;
}
current.Append(count).Append(s[j]);
}
s = current.ToString();
}
return s;
}
}
Ставь 👍 и забирай 📚 Базу знаний
Сложность: medium
Последовательность "считай и скажи" (countAndSay) строится рекурсивно:
- countAndSay(1) = "1"
- countAndSay(n) — это кодирование длин серий из countAndSay(n - 1).
Пример кодирования длин серий (RLE):
- "3322251" → "23321511"
Для заданного n верните n-й элемент последовательности.
Пример:
Input: n = 4
Output: "1211"
👨💻 Алгоритм:
1⃣Начать с s = "1".
2⃣Для каждого шага n-1 раз:
- Пройти по s, группируя одинаковые символы.
- Для каждой группы записать количество и сам символ.
- Обновить s.
3⃣Вернуть итоговую строку.
😎 Решение:
public class Solution {
public string CountAndSay(int n) {
string s = "1";
for (int i = 0; i < n - 1; i++) {
StringBuilder current = new StringBuilder();
for (int j = 0; j < s.Length; j++) {
int count = 1;
while (j < s.Length - 1 && s[j] == s[j + 1]) {
j++;
count++;
}
current.Append(count).Append(s[j]);
}
s = current.ToString();
}
return s;
}
}
Ставь 👍 и забирай 📚 Базу знаний