排列和组合问题的PHP实现

1.排列

给定一个字符串,比如:abcd,输出这个字符串的所有排列。

/**
 * 交换值
 * @param $a
 * @param $b
 */
function switchPos(&$str, $a, $b)
{
    $tmp = $str[$a];
    $str[$a] = $str[$b];
    $str[$b] = $tmp;
}

/**
 * 排列
 */
function Permutation($str, $len, $begin, &$result)
{
    if($len <= 0) return $result;
    if($len - $begin < 2) {
        $result[] = $str;
    } else {
        for($i = $begin; $i < $len; $i ++)
        {
            if($i != $begin && $str[$begin] == $str[$i]) continue;
            switchPos($str, $begin, $i);
            Permutation($str, $len, $begin + 1, $result);
            switchPos($str, $begin, $i);
        }
    }
}

2. 组合

给定一个字符串,比如:abcd,输出这个字符串的所有组合。


/**
 * 组合
 * @param $str
 * @param $result
 */
function Combination($str, &$result)
{
    $len = strlen($str);
    $cache = [];
    for($i = 1; $i <= $len; $i ++)
    {
        Combine($str, 0, $i, $cache, $result);
    }
}

/**
 * 组合操作
 * @param $str
 * @param $begin
 * @param $number
 * @param $cache
 * @param $result
 */
function Combine($str, $begin, $number, &$cache, &$result)
{
    if($number == 0) {
        $element = implode('', $cache);
        $result[] = $element;
        return;
    }
    if($begin >= strlen($str)) return;
    array_push($cache, $str[$begin]);
    Combine($str, $begin + 1, $number - 1, $cache, $result);
    array_pop($cache);
    Combine($str, $begin + 1, $number, $cache, $result);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,120评论 0 10
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,452评论 0 4
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,944评论 0 5
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,712评论 0 2
  • 第六章 第六课 学会不为钱工作 “对于受过良好教育的爸爸来说,工作的稳定就是一切;而对于富爸爸来说,不断学习才是...
    Annasun0451阅读 4,388评论 0 3