这个特别容易想,就是时间上很不能接受
我们知道对于26个字母的组合,那么每个字母要么选要么不选两种情况。
所以我们用一个int[26]的数组来代表一个组合。其中的值要么是0,要么是1.
那么就有2^26种组合,我们可以用十进制来计数,然后转换成二进制即,我们遍历2^26次,将所有的数转换成二进制并存储好就得到了字母表所有的组合,所以代码如下:
public static ArrayList wors() {
long max = (long) Math.pow(2, 10);
int[] word = new int[26];
ArrayList returnList = new ArrayList<>();
for (long i = 0; i < max; i++) {
int j = 0;
long a = i;
while (a > 0) {
word[j] = (int)a % 2;
a /= 2;
j++;
}
returnList.add(word);
word = new int[26];
}
return returnList;
}
不过这个算法在我的机子上要降低运算数才能跑起来。。也就是不是全部输出,可能与内存大小有关。。。。总而言之。。很慢却是很直观