📅  最后修改于: 2023-12-03 15:39:28.910000             🧑  作者: Mango
康奈尔序列(Look-and-say sequence),又称外观数列,是一种数字序列。起始为1,之后的数字是对前一个数字的描述,描述方式是连续相同数字的个数和该数字。
例如,1的描述为1个1,即11;11的描述为2个1,即21;21的描述为1个2,1个1,即1211;1211的描述为1个1,1个2,2个1,即111221;以此类推。
def next_look_and_say(s: str) -> str:
res = []
i = 0
while i < len(s):
count = 1
while i + 1 < len(s) and s[i] == s[i + 1]:
count += 1
i += 1
res.append(str(count) + s[i])
i += 1
return "".join(res)
def look_and_say(n: int) -> str:
s = "1"
for i in range(n - 1):
s = next_look_and_say(s)
return s
public static String nextLookAndSay(String s) {
StringBuilder sb = new StringBuilder();
int i = 0;
while (i < s.length()) {
int count = 1;
while (i + 1 < s.length() && s.charAt(i) == s.charAt(i + 1)) {
count++;
i++;
}
sb.append(count).append(s.charAt(i));
i++;
}
return sb.toString();
}
public static String lookAndSay(int n) {
String s = "1";
for (int i = 1; i < n; i++) {
s = nextLookAndSay(s);
}
return s;
}
#include <sstream>
#include <string>
std::string nextLookAndSay(std::string s) {
std::ostringstream ss;
int i = 0;
while (i < s.length()) {
int count = 1;
while (i + 1 < s.length() && s[i] == s[i + 1]) {
count++;
i++;
}
ss << count << s[i];
i++;
}
return ss.str();
}
std::string lookAndSay(int n) {
std::string s = "1";
for (int i = 1; i < n; i++) {
s = nextLookAndSay(s);
}
return s;
}
康奈尔序列在研究自然界、音乐、图案等领域有一定的应用。在计算机科学中,康奈尔序列可以用于数据压缩和随机数生成等方面。例如,可以使用康奈尔序列生成一个随机序列,利用该序列产生的随机数的性质。