zoukankan      html  css  js  c++  java
  • 输出字符串的所有组合可能

    题目

    输出一个字符串所有可能的组合,如"abc",结果为['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc'],不考虑字符顺序,ab和ba输出一种即可。

    分析

    可以采用递归算法,要计算"abc"的结果,可以考虑先计算"ab"的结果,在"ab"的结果基础上,再加入"c"

    递归公式

    f(abc) = f(ab) + f(ab)c + c
    f(ab)c意思是把ab结果集中每个元素都添加c,最后在加入c本身,就是f(abc)的最终结果了

    结束条件

    当拆解到只有一个字符时,直接返回,比如['a']

    function allStr($str) {
        if (strlen($str) == 0) return [];
        if (strlen($str) == 1) return [$str[0]];
        $last = substr($str, -1);
        
       $subArr = allStr(substr($str, 0, -1));
       $rs = $subArr;
       
       for ($i=0;$i<count($rs);$i++) {
           $rs[$i] = "{$rs[$i]}{$last}";
       }
       array_push($rs, $last);
       
       return array_merge($subArr, $rs);
    }
    
    $a = 'abcd';
    
    $result = allStr($a);
    
    print_r($result);
    
  • 相关阅读:
    stdin stdout stderr
    stat
    ssh-keyscan
    START TRANSACTION
    ssh-keygen
    ssh-agent
    ssh-add
    虚拟化之lxc
    Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息
    Java实现 LeetCode 97 交错字符串
  • 原文地址:https://www.cnblogs.com/whyly/p/13489327.html
Copyright © 2011-2022 走看看