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

题干

输入一个字符串,打印出该字符串中字符的所有组合。例如输入字符串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');
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,425评论 0 2
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,880评论 2 16
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,167评论 0 7
  • 动物以本能存在,人以理性存在。而理性的具体表现便是道德。 正如康德所言:“有两样东西,我们愈经常愈持久地加以思索,...
    郁土1阅读 878评论 0 1
  • 星期天的早上,森林里淅淅沥沥地下起雨来。轻盈的雨滴随风飘落,落在大树刚刚萌发的嫩黄色叶儿上,落在有几分干涸的大地上...
    豆妈可爱多阅读 1,272评论 11 13