首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP看上去-说顺序

PHP看上去-说顺序
EN

Stack Overflow用户
提问于 2017-10-29 11:31:08
回答 2查看 586关注 0票数 0

我试图在PHP中编写Conway外观序列代码。这是我的代码:

代码语言:javascript
复制
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方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-29 11:46:59

我想出了两种方法。

1也是在循环后的结果中添加级联。

代码语言:javascript
复制
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子句并确定最后一个迭代:

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-29 11:50:54

我建议您以其他方式使用两个嵌套的while循环:

代码语言:javascript
复制
<?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; 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46999647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档