我正在尝试返回String数组中所有可能的值排列。我想出了以下代码,可以进行所有可能的排列;它工作正常。
private void combineArray(String sPrefix, String[] sInput, int iLength) {
if (iLength == sPrefix.length()) {
//This value should be returned and concatenated:
System.out.println(sPrefix);
} else {
for (int i=0; i<sInput.length; i++) {
combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
}
}
}
如果我输入{x,y,z},它会打印到控制台:
xyz
xzy
yxz
yzx
zxy
zyx
我的问题是我找不到将这些值返回到原始调用函数的方法。所以我希望这个函数不返回'void',而是一个包含sPrefix的连接值的'String'。
我一直在努力解决这个问题,现在我似乎看不清楚了。 :)任何帮助将不胜感激。
答案 0 :(得分:4)
我认为将作为参数传递给列表并将其填充到方法中可能会更好,而不是返回列表:
private void combineArray(List<String> lOut, String sPrefix, String[] sInput, int iLength) {
if (iLength == sPrefix.length()) {
//This value should be returned and concatenated:
System.out.println(sPrefix);
lOut.add(sPrefix);
} else {
for (int i=0; i<sInput.length; i++) {
combineArray(lOut, sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
}
}
}
然后,您可以使用包装器方法创建new ArrayList<String>
,将其传递给上述方法,然后将其返回。
答案 1 :(得分:1)
你可以拥有ArrayList<String>
并添加所有字符串..然后你可以返回这个ArrayList ..
List<String> listString = new ArrayList<>();
private void combineArray(String sPrefix, String[] sInput, int iLength) {
if (iLength == sPrefix.length()) {
listString.add(sPrefix);
//This value should be returned and concatenated:
System.out.println(sPrefix);
} else {
for (int i=0; i<sInput.length; i++) {
combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
}
}
return listString;
}
答案 2 :(得分:0)
继续添加相同的输出..像这样:
private String combineArray(String sPrefix, String[] sInput, int iLength, String output) {
if (iLength == sPrefix.length()) {
//This value should be returned and concatenated:
System.out.println(sPrefix);
output = output+"|+sPrefix;
return output;
} else {
for (int i=0; i<sInput.length; i++) {
output = combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength, output);
}
}
}
一旦基本概念有效,您也可以使用ListArray而不是String。