【发布时间】:2012-09-19 16:42:10
【问题描述】:
我正在尝试返回字符串数组中所有可能的值排列。我提出了以下代码,可以进行所有可能的排列;它工作正常。
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”。
我已经为此苦苦挣扎了一段时间,我似乎再也看不清楚了。 :) 任何帮助将不胜感激。
【问题讨论】:
-
为什么不返回一个添加了所有字符串组合的列表?更好,不是吗?
-
只是抛开一些想法,但是您能否在每次迭代期间更改外部数组,或者返回将通过每个递归级别返回的值数组?
-
是的,只需从递归例程中返回数据。您可以返回常规的
[]数组或其中一个集合类,后者更好,因为您可以在从每个级别返回时添加到它。 -
大声笑,你们都快得离谱。 :) 谢谢!我最初认为传入一个列表参数是行不通的,因为据我所知,Java 只通过值而不是通过引用传递......?另外,有没有优雅的方式使用 return 语句?
-
Java 通过引用传递所有对象。只有“缩放器”——整数、字符、浮点数等——按值传递。
标签: java arrays recursion permutation