function lookAndSay($s) {
// 将返回值初始化为一个空串
$r = '';
// $m包含要统计的字符,初始化为字符串中的第一个字符
$m = $s[0];
// $n是已查看过的$m个数,初始化为1;
$n = 1;
for ($i = 1, $j = strlen($s); $i < $j; $i++) {
// 如果这个字符与上一个相同
if ($s[$i] == $m) {
// 将这个字符个数加1
$n++;
} else {
// 否则,将字符个数和字符本身增加到返回值
$r .= $n.$m;
// 将要查找的字符串设置为当前字符
$m = $s[$i];
// 并将字符个数重置为1
$n = 1;
}
}
// 返回构建的字符串以及最后的字符串个数及字符
return $r.$n.$m;
}
for ($i = 0, $s = 1; $i < 10; $i++) {
$s = lookAndSay($s);
print $s."<br>";
}
结果为:
“Look and Say”序列,因为每个元素是通过查看前一个元素并说出其中足什么来得到的。例如,查看第一个元素1,你会说“一个1”,所以第二个元素是“11”。这就是两个1,所以第三个元素是“21” 。类似地,这里有一个2和一个1,所以第四个元素是“1211”,依此类推。