标签 lookandsay序列 下的文章

lookandsay序列


    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”,依此类推。