【发布时间】:2015-02-23 15:19:01
【问题描述】:
我为nCr 问题编写了一个实用程序类。它接受一个通用数组并返回所有组合(不重复)。
import java.util.ArrayList;
public class fooClass {
public static void main(String[] args) {
class Utils {
public int factorial(int n) {
int p = 1;
int i = 1;
while(i <= n) {
p *= i++;
}
return p;
}
public <T> ArrayList<T[]> combinations(T[] array, int r) {
int n = array.length;
int[] vec = new int[r];
int i, j, k, m, o;
for (i = 0; i < vec.length; i++) {
//int j = vec[i];
vec[i] = i;
}
ArrayList<T[]> result = new ArrayList<T[]>();
int total = factorial(n) / (factorial(r) * factorial(n - r));
for (i = 0; i < total; i++) {
T[] combination = (T[])new Object[r];
for (k = 0; k < r; k++) {
combination[k] = array[vec[k]];
}
result.add(combination);
j = r - 1;
if (vec[j] + 1 < n) {
vec[j]++;
} else {
o = j;
while (j-- >= 0) {
if (vec[j] + 1 < n - r - (j + 1)) {
vec[j]++;
m = j + 1;
while (m++ <= o) {
vec[m] = vec[m-1] + 1;
}
break;
} //if end
} //while end
} //if-else end
}
return result;
}
};
Utils utils = new Utils();
String test = "abcde";
ArrayList<char[]> combinations = utils.combinations(test.toCharArray(), 3);
}
}
现在问题出在我所说的那条线上;当我通过 char[] 时,编译器会抱怨。
Utils 类型中的方法组合(T[], int) 不适用于参数(char[], int)
解决这个问题的正确方法是什么?
【问题讨论】:
-
使用 Character[] 代替 char[]
-
ArrayList 接受一个对象,而不是一个原语。
-
这就是为什么你在
Arrays类中拥有所有这些重载方法的原因。