Look And Say序列,简单的说就是根据你看到的数字,写出下一个数字。比如:
第一个数字是:1。
看着第一个数字你可以说1个1,那么第二个数字就是:11。
看着第二个数字你可以说2个1,即第三个数字是:21。
看着第三个数字你可以说1个2,1个1,即第四个数字是:1211。
看着第四个数字你可以说1个1,1个2,2个1,即第五个数字是:111221。
…………
根据详细的说明可以参见:http://en.wikipedia.org/wiki/Look-and-say_sequence
下面用PHP实现这个序列,如下:
function
look(
$str
)
{
$len = strlen ( $str );
$count = 0 ;
$result = '' ;
$temp = $str [ 0 ];
for ( $i = 0 ; $i < $len ; $i ++ )
{
if ( $temp != $str [ $i ])
{
$result .= $count . $temp ;
$temp = $str [ $i ];
$count = 1 ;
}
else
{
$count ++ ;
}
}
$result .= $count . $temp ;
return $result ;
}
$test_str = " 1 " ;
echo $test_str . ' </br> ' ;
for ( $i = 0 ; $i < 10 ; $i ++ )
{
$test_str = look( $test_str );
print $test_str . " </br> " ;
}
{
$len = strlen ( $str );
$count = 0 ;
$result = '' ;
$temp = $str [ 0 ];
for ( $i = 0 ; $i < $len ; $i ++ )
{
if ( $temp != $str [ $i ])
{
$result .= $count . $temp ;
$temp = $str [ $i ];
$count = 1 ;
}
else
{
$count ++ ;
}
}
$result .= $count . $temp ;
return $result ;
}
$test_str = " 1 " ;
echo $test_str . ' </br> ' ;
for ( $i = 0 ; $i < 10 ; $i ++ )
{
$test_str = look( $test_str );
print $test_str . " </br> " ;
}
注意look函数中的for循环,当$len-1时,$result并未累加最后一位数字的统计结果,所以在循环完成后再次累加一次。
最后输出结果:
1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211
11131221133112132113212221