我需要长度为 n 的各种单词,并且在每个位置/索引处可以有 m 个不同的元素。
例如 n = 5
允许的第一个位置元素是:H,Y,U,B,N
对于第二个位置允许的元素是:E,S,D
对于第三个位置允许的元素是:L,O,P
对于第四个位置允许的元素是:L,O,P
对于第五个位置允许的元素是:O,K,L
所以可以组成的各种词有:HELLO、YELLK、BDPOK等
在 Java 中以一种有效的方式找出所有可能的单词的有效方法是什么?
最佳答案
我认为递归地从每个字符串中选择每个字符,然后移动到下一个字符串是最简单的方法,我实现了 java 代码,我添加了一些注释,如果有任何不清楚的地方,请不要犹豫。
static String s[] = {"HYUBN", "ESD", "LOP", "LOP", "OKL"};
static ArrayList<String> comb; // arraylist is going to hold results.
static void dfs(String x,int i) {
if(i == s.length) { // there is no more string that can be generated
comb.add(x); // save the found string
return;
}
for(int j=0;j<s[i].length();j++) // for each character in the current string
dfs(x+s[i].charAt(j),i+1); // take the current character and move to the next string
}
public static void main(String[] args) {
comb = new ArrayList<>();
dfs("",0);
for(String x:comb) out.print(x + " ");
}
关于java - 如何在 Java 中将字符组合成一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42256569/