xh3ccc
V2EX  ›  C

如何方便地遍历阶乘输出字符串呢[c/c++]

  •  
  •   xh3ccc · Apr 20, 2019 · 2924 views
    This topic created in 2585 days ago, the information mentioned may be changed or developed.
    简化如下:

    void foo(char chars[], int n);

    传入的字符数组 chars 大小为 n(n>=1, <60),包含了 n 个不同的可打印字符。将 n 个字符按不同顺序拼接并输出,字符串不包含重复字符。

    比如 chars = {'a', 'b', 'c'}; n = 3;
    输出:
    abc
    acb
    bac
    bca
    cab
    cba
    共 6 个。
    可知需输出 n! 个字符串。

    n!倒是好求出来:
    int K = 1;
    for (i = 1; i <= n; i++)
    K *= i;
    smdbh
        1
    smdbh  
       Apr 20, 2019   ❤️ 1
    全排列,一般递归吧
    xh3ccc
        2
    xh3ccc  
    OP
       Apr 20, 2019
    @smdbh 啊 对 全排列。感谢。实际需求是包含有重复的字符串数组而不是字符数组。但有提供的关键词,方便多了。
    jxf2008
        3
    jxf2008  
       Apr 20, 2019
    这不是一个基本的排列组合么。。
    letianqiu
        4
    letianqiu  
       Apr 20, 2019
    stl next_permutation,C++基础好好补一补吧
    azh7138m
        5
    azh7138m  
       Apr 20, 2019
    xh3ccc
        6
    xh3ccc  
    OP
       Apr 20, 2019
    @jxf2008
    @letianqiu
    @azh7138m
    衰,,实际需求是根据任意 SQL 条件查找存在的索引文件,比题目复杂。

    比如表 t 有列 AAA BBB CCC,表 t 可能建立了 1 个或多个单列索引或组合索引(索引名根据组合顺序命名),比如 create index idx_AAA_CCC on t(AAA, CCC), create index idx_CCC_BBB on t(CCC, BBB);

    对 where BBB > 10 And BBB < 100 And CCC IN ('a', 'b', 'c', 'd'); 就要找到索引 idx_CCC_BBB 并使用它。
    azh7138m
        7
    azh7138m  
       Apr 20, 2019   ❤️ 1
    列数不多的时候,一个列分配一个 bit 做标志位,就变成了一个简单地数字查找了......
    Mistwave
        8
    Mistwave  
       Apr 20, 2019 via iPhone
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3538 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 00:14 · PVG 08:14 · LAX 17:14 · JFK 20:14
    ♥ Do have faith in what you're doing.