我试图在PHP中编写Conway外观序列代码。这是我的代码:
function look_and_say ($number) {
$arr = str_split($number . " ");
$target = $arr[0];
$count = 0;
$res = "";
foreach($arr as $num){
if($num == $target){
$count++;
}else{
$res .= $count . $target;
$count = 1;
$target = $num;
}
}
return $res;
}当我运行这个函数时,look_and_say(9900)得到了我所期望的值:2920。我的问题是将$arr指定为$arr = str_split($number)而不是$arr = str_split($number . " "),结果忽略了$arr的最后一个元素并返回29。
在$arr前端末尾添加空空间以检查最后一个元素是正常的,还是有更好的方法来实践这段代码--除了regex方式。
发布于 2017-10-29 11:46:59
我想出了两种方法。
1也是在循环后的结果中添加级联。
function look_and_say ($number) {
$arr = str_split($number);
$target = $arr[0];
$count = 0;
$res = "";
foreach($arr as $num){
if($num == $target){
$count++;
}else{
$res .= $count . $target;
$count = 1;
$target = $num;
}
}
$res .= $count . $target;
return $res;
}第二个是在循环中添加另一个if子句并确定最后一个迭代:
function look_and_say ($number) {
$arr = str_split($number);
$target = $arr[0];
$count = 0;
$res = "";
$i=0;
$total = count($arr);
foreach($arr as $num){
if($i == ($total-1))
{
$count++;
$res .= $count . $target;
}
elseif($num == $target){
$count++;
}else{
$res .= $count . $target;
$count = 1;
$target = $num;
}
$i++;
}
return $res;
}发布于 2017-10-29 11:50:54
我建议您以其他方式使用两个嵌套的while循环:
<?php
function lookAndSay($number) {
$digits = str_split($number);
$result = '';
$i = 0;
while ($i < count($digits)) {
$lastDigit = $digits[$i];
$count = 0;
while ($i < count($digits) && $lastDigit === $digits[$i]) {
$i++;
$count++;
}
$result .= $count . $lastDigit;
}
return $result;
}https://stackoverflow.com/questions/46999647
复制相似问题