Последовательность подсчитай и скажи – это последовательность строк цифр, определяемая рекурсивной формулой:
countAndSay(1) = "1"countAndSay(n)— это то, как вы «произносите» цифровую строку изcountAndSay(n-1), которая затем преобразуется в другую цифровую строку.
Чтобы определить, как вы «произносите» строку цифр, разделите ее на минимальное количество подстрок, чтобы каждая подстрока содержала ровно одну уникальную цифру. Затем для каждой подстроки произнесите количество цифр, затем произнесите цифру. Наконец, соедините каждую указанную цифру.
Например, высказывание и преобразование для строки цифр "3322251":

Получив положительное целое число n, вернуть терминnthпоследовательности считай и скажи.
Пример 1:
Input: n = 1 Output: "1" Explanation: This is the base case.
Пример 2:
Input: n = 4 Output: "1211" Explanation: countAndSay(1) = "1" countAndSay(2) = say "1" = one 1 = "11" countAndSay(3) = say "11" = two 1's = "21" countAndSay(4) = say "21" = one 2 + one 1 = "12" + "11" = "1211"
Ограничения:
1 <= n <= 30
Решения:
Питон
class Solution:
def countAndSay(self, n: int) -> str:
s = "1"
for _ in range(n - 1):
count = 1
new_s = ""
for i in range(1, len(s)):
if s[i] == s[i - 1]:
count += 1
else:
new_s += str(count) + s[i - 1]
count = 1
new_s += str(count) + s[-1]
s = new_s
return s
C#
public class Solution
{
public string CountAndSay(int n)
{
string s = "1";
for (int i = 0; i < n - 1; i++)
{
int count = 1;
string newS = "";
for (int j = 1; j < s.Length; j++)
{
if (s[j] == s[j - 1])
{
count++;
}
else
{
newS += count.ToString() + s[j - 1];
count = 1;
}
}
newS += count.ToString() + s[s.Length - 1];
s = newS;
}
return s;
}
}
Ява
public class Solution {
public String countAndSay(int n) {
String s = "1";
for (int i = 0; i < n - 1; i++) {
int count = 1;
StringBuilder newS = new StringBuilder();
for (int j = 1; j < s.length(); j++) {
if (s.charAt(j) == s.charAt(j - 1)) {
count++;
} else {
newS.append(count).append(s.charAt(j - 1));
count = 1;
}
}
newS.append(count).append(s.charAt(s.length() - 1));
s = newS.toString();
}
return s;
}
}
JavaScript
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
let s = "1";
for (let i = 0; i < n - 1; i++) {
let count = 1;
let newS = "";
for (let j = 1; j < s.length; j++) {
if (s[j] === s[j - 1]) {
count++;
} else {
newS += count + s[j - 1];
count = 1;
}
}
newS += count + s[s.length - 1];
s = newS;
}
return s;
};
Типографический текст
function countAndSay(n: number): string {
let s = "1";
for (let i = 0; i < n - 1; i++) {
let count = 1;
let newS = "";
for (let j = 1; j < s.length; j++) {
if (s[j] === s[j - 1]) {
count++;
} else {
newS += count + s[j - 1];
count = 1;
}
}
newS += count + s[s.length - 1];
s = newS;
}
return s;
}
PHP
class Solution {
/**
* @param Integer $n
* @return String
*/
function countAndSay($n) {
$s = "1";
for ($i = 0; $i < $n - 1; $i++) {
$count = 1;
$newS = "";
for ($j = 1; $j < strlen($s); $j++) {
if ($s[$j] == $s[$j - 1]) {
$count++;
} else {
$newS .= $count . $s[$j - 1];
$count = 1;
}
}
$newS .= $count . $s[strlen($s) - 1];
$s = $newS;
}
return $s;
}
}
Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы. Не забудьте подписаться и похлопать в поддержку моего контента