zoukankan      html  css  js  c++  java
  • 输入一个字符串,打印出该字符串的所有排列

    输入一个字符串,打印出该字符串的所有排列。

    例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串 abc,acb,bac,bca,cab,cba。

    题解

    了解下排列的数学知识:

    排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。

    计算公式:image

    运用递归。

    思路:轮询,递归对后面元素轮询,不断交换首项位置,让每一项可以顺序输出,递归结束恢复交换,使上层轮询结构正常。标记位置到达数组尾部,输出元素。

    图示:

    image

    <?php
        //全排列
        //$result定义字符串,担心内存超标,但字符达到8位以上,所占内存急剧膨胀
        function fullArrange( $arr,$starti=0,&$result='' )
        {
            if( count($arr)<=0 )
                throw new Exception('空项');
    
            $count = count($arr);
    
            if($starti == $count-1){
                $result .= implode($arr)."
    ";
            }
    
            for ($i=$starti;$i<$count;$i++) {
                if($starti!=$i){
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$starti];
                    $arr[$starti]= $tmp;
                }
    
                $this->fullArrange($arr,$starti+1,$result);
    
                if($starti!=$i){
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$starti];
                    $arr[$starti]= $tmp;
                }
            }
            return $result;
        }
    
            ini_set('max_execution_time',0);
            $str = 'abc';
            $strArr = str_split($str);
            $r = $this->fullArrange($strArr);
            var_dump($r);die;
    
  • 相关阅读:
    什么是web框架
    编写CGI程序步骤
    web开发 c/s结构 和 b/s结构
    python自带的web服务器
    自制计算器
    条件判断
    模版继承
    参数传递
    异常处理
    【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
  • 原文地址:https://www.cnblogs.com/followyou/p/11384553.html
Copyright © 2011-2022 走看看