剑指Offer-PHP实现

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

2018-08-25  本文已影响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');
上一篇下一篇

猜你喜欢

热点阅读