《剑指Offer》-38.字符串的排列

题干

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

解题思路

求整个字符串的排列,可以看出两步,第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二步固定第一个字符,求后面所有字符的排列,而后面所有字符的排列又可以递归上面的两步完成。

代码实现

<?php
function permutation($str)
{
    if (empty($str)) {
        return;
    }

    doPermutation($str, 0);

}

function doPermutation($str, $pos)
{
    if ($pos == mb_strlen($str) - 1) {
        echo $str.PHP_EOL;
    } else {
        for ($i = $pos; $i < mb_strlen($str); $i++) {
            $tmp = $str[$pos];
            $str[$pos] = $str[$i];
            $str[$i] = $tmp;

            doPermutation($str, $pos + 1);

            $tmp = $str[$pos];
            $str[$pos] = $str[$i];
            $str[$i] = $tmp;
        }
    }
}

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

推荐阅读更多精彩内容

  • 本文首发于我的个人博客:尾尾部落 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串...
    繁著阅读 505评论 1 2
  • 本系列导航:剑指offer(第二版)java实现导航帖](http://www.jianshu.com/p/010...
    ryderchan阅读 1,629评论 0 1
  • 写在前面: 最近遇到了一道题涉及全排列的。记得之前在《剑指offer》上遇到了一道类似的题。因此今早把这道题翻了出...
    BlueSkyBlue阅读 633评论 0 0
  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 11,313评论 4 11
  • 渐隐原理应用在认字阅读和数学上 教野童认字,仓颉造字都有渐隐原理。我们在教孩子认字的时候往往是直接拿过一个字来。来...
    冰糖雪儿阅读 152评论 0 0