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

2019-04-20 14:52:00 +08:00
 xh3ccc
简化如下:

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;
2251 次点击
所在节点    C
8 条回复
smdbh
2019-04-20 14:55:37 +08:00
全排列,一般递归吧
xh3ccc
2019-04-20 15:02:11 +08:00
@smdbh 啊 对 全排列。感谢。实际需求是包含有重复的字符串数组而不是字符数组。但有提供的关键词,方便多了。
jxf2008
2019-04-20 15:06:07 +08:00
这不是一个基本的排列组合么。。
letianqiu
2019-04-20 15:11:44 +08:00
stl next_permutation,C++基础好好补一补吧
azh7138m
2019-04-20 15:13:08 +08:00
xh3ccc
2019-04-20 15:42:40 +08:00
@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
2019-04-20 15:55:54 +08:00
列数不多的时候,一个列分配一个 bit 做标志位,就变成了一个简单地数字查找了......
Mistwave
2019-04-20 15:59:07 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/557040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX