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

《剑指Offer》-38-1.字符串的组合

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

题干

输入一个字符串,打印出该字符串中字符的所有组合。例如输入字符串abc,则它们的组合有a、b、c、ab、ac、bc、abc。

解题思路

如果输入n个字符,则求这n个字符的长度为m(1 =< m <= n)的组合也是将字符分成两部分,第一个字符和其余字符。如果组合包含第一个字符,则从剩余字符中找出m-1个字符,如果组合不包含第一个字符,则从剩余字符中找出m个字符。

代码实现

<?php

function combination($str)
{
    if (empty($str)) {
        return;
    }

    doCombination($str, mb_strlen($str), []);
}

function doCombination($str, $len, $arr)
{
    if (empty($str) || $len == 0) {
        if (!empty($arr)) {
            echo implode('', $arr).PHP_EOL;
        }

        return;
    }
    
    array_push($arr, $str[0]);
    doCombination(mb_substr($str, 1), $len - 1, $arr);

    array_pop($arr);
    doCombination(mb_substr($str, 1), $len, $arr);
}

combination('abcd');

相关文章

网友评论

    本文标题:《剑指Offer》-38-1.字符串的组合

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