美文网首页剑指Offer-PHP实现
《剑指Offer》-38.字符串的排列

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

作者: 懒人成长 | 来源:发表于2018-08-25 20:53 被阅读0次

题干

输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串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');

相关文章

网友评论

    本文标题:《剑指Offer》-38.字符串的排列

    本文链接:https://www.haomeiwen.com/subject/vrzgiftx.html