输入一个字符串,打印出该字符串的所有排列
Posted followyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个字符串,打印出该字符串的所有排列相关的知识,希望对你有一定的参考价值。
输入一个字符串,打印出该字符串的所有排列。
例如输入字符串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)表示。
计算公式:
运用递归。
思路:轮询,递归对后面元素轮询,不断交换首项位置,让每一项可以顺序输出,递归结束恢复交换,使上层轮询结构正常。标记位置到达数组尾部,输出元素。
图示:
<?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)."\n";
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;
以上是关于输入一个字符串,打印出该字符串的所有排列的主要内容,如果未能解决你的问题,请参考以下文章
20190405算法-输入一个字符串,按字典序打印出该字符串中字符的所有排列
剑指Offer(Java版)第三十二题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的 所有字符串abc,acb,bac,bc
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。