题目:字符串"aa bb cc dd ee ff hh ii" 每个元素以空格隔开,从这个字符串中随机选择5个输出,要求输出的元素必须符合元素在字符串先后位置,例如输出aa bb cc dd ee 、 aa bb dd ff ii 等等.
解决思路: 递归实现排序组合
实现代码:
public class AnotherCombinationTest {
private static final String str = "aa bb cc dd ee ff hh ii";
public static void main(String args[]) {
int len = 5;
String[] inArrays = str.split(" ");
String[] outArrays = new String[len];
go(1, inArrays, outArrays);
}
private static void go(int level, String[] inArrays, String[] outArrays) {
List<String> inList = new ArrayList<String>();
for (int i = 0; i < inArrays.length; i++) {
String _temp = inArrays[i];
if (inList.contains(_temp)) continue;
inList.add(_temp);
outArrays[level - 1] = _temp;
int nextLevel = level + 1;
if (level == 5) {
System.out.println(Arrays.toString(outArrays));
} else {
go(nextLevel, createNewArray(inArrays, i + 1), outArrays);
}
}
}
/**
* 构建新的待排序选择数组
* @param oldArray
* @param index 已经被选择的元素之前的元素将全部被剔除
* @return
*/
private static String[] createNewArray(String[] oldArray, int index) {
String[] newArray = new String[oldArray.length - index];
for (int i = 0; i < oldArray.length; i++) {
if (i < index) continue;
newArray[i - index] = oldArray[i];
}
return newArray;
}
}