Сложность: medium
Последовательность "Count and Say" определяется рекурсивно:
-
countAndSay(1) = "1" -
countAndSay(n) — это результат кодирования длин серий countAndSay(n - 1). Кодирование длин серий (
RLE) заменяет повторяющиеся символы на их количество и сам символ. Например,
"3322251" превращается в "23321511". Пример:
Input: n = 4
Output: "1211"
👨💻 Алгоритм:
1⃣Начинаем с
s = "1". 2⃣Для каждого
n, начиная с 2, применяем RLE (считаем подряд идущие цифры и формируем новую строку). 3⃣Используем регулярное выражение
/(.)\1*/, чтобы находить группы одинаковых символов. 😎 Решение:
function countAndSay($n) {
$s = "1";
for ($i = 2; $i <= $n; $i++) {
$t = "";
preg_match_all('/(.)\1*/', $s, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$t .= strlen($match[0]) . $match[1];
}
$s = $t;
}
return $s;
}Ставь 👍 и забирай 📚 Базу знаний