假设我有一个任意大小的数组,其中包含单个字符。我想计算这些字符的所有可能组合,直到任意长度。
因此,可以说我的数组是[1、2、3]。用户指定的长度为2。然后可能的组合为[11、22、33、12、13、23、21、31、32]。
我在寻找合适的算法时遇到了麻烦,该算法允许任意长度,而不仅仅是排列数组。哦,虽然速度不是绝对关键,但也应该相当快。
只需加进位即可。
假设您的数组包含4个符号,而您想要的长度为3。
以000开头(即,单词上的每个符号=字母[0])
然后加起来:
000 001 002 003 010 011 …
该算法(给定这些索引)只是为了增加最低数量。如果达到字母表中符号的数量,则增加前一个数字(遵循相同的规则)并将当前值设置为0。
C ++代码:
int N_LETTERS = 4; char alphabet[] = {'a', 'b', 'c', 'd'}; std::vector<std::string> get_all_words(int length) { std::vector<int> index(length, 0); std::vector<std::string> words; while(true) { std::string word(length); for (int i = 0; i < length; ++i) word[i] = alphabet[index[i]]; words.push_back(word); for (int i = length-1; ; --i) { if (i < 0) return words; index[i]++; if (index[i] == N_LETTERS) index[i] = 0; else break; } } }
代码未经测试,但是应该可以解决。