PHP字符串全排列算法

  今天面试一家公司,因为简历上写了ACM经历,被问到了PHP字符串全排列算法,当时时间有限只给了思路,回家后把它实现了出来:

<?php
/**
 * PHP字符串全排列算法
 */
$results = [];
$arr = [];

function bfs($start) {
    global $arr;
    global $results;

    $queue = [];
    array_push($queue, $start);

    while( !empty($queue) ) {
        $cur = array_shift($queue);
        if(strlen($cur) === count($arr)) {
            array_push($results, $cur);
        }

        $arr_temp = $arr;
        for ($i=0; $i<strlen($cur); $i++) {
            unset($arr_temp[$cur[$i]]);
        }

        foreach ($arr_temp as $key => $value) {
            $node = $cur . $key;
            array_push($queue, $node);
        }
    }
}

function allPermutation($string) {
    $array = [];
    for($i=0; $i<strlen($string); $i++) {
        array_push($array, $string[$i]);
    }
    sort($array);

    foreach ($array as $item) {
        global $arr;
        $arr[$item] = 1;
    }

    foreach ($array as $item) {
        bfs($item);
    }
}

allPermutation('abcde');
var_dump($results);
运行结果

BFS就是如此简单粗暴,哈哈!不懂的小伙伴可以留言:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 相信每一位玩ACM程序设计竞赛的同学来说,都有一个从入门到精通的过程,而且分享他们经验的时候,见到最多的就是一种合...
    FinlayLiu阅读 5,458评论 6 182
  • 其实我的求职过程在十一之前就已经结束了,总体讲比较顺利。参加面试的几家公司基本都拿到了offer,分别是阿里巴巴、...
    Pitfalls阅读 873评论 1 3
  • (一) “民”在字典里的解释是“以劳动群众为主体的社会基本成员”,而“讠”本就带有讲述的意思,故而在我浅薄的认知里...
    Zzz宣儿阅读 369评论 0 0
  • 前天儿子在微信里请示他爹提出要留长发,准备留出”丸子头“发型......他爹第一反应是现在常见的年青男孩子那种两边...
    殳然阅读 366评论 0 1
  • 武侠小说里聪明的女性角色很多,赵敏算无遗策,任盈盈聪慧无双,上官小仙十几岁就搅得整个江湖血雨腥风,但是要说文理兼修...
    慕容雪洛阅读 819评论 0 0