打印出字母表的所有组合每个字母至多只出现一次

这个特别容易想,就是时间上很不能接受

我们知道对于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;
    }

不过这个算法在我的机子上要降低运算数才能跑起来。。也就是不是全部输出,可能与内存大小有关。。。。总而言之。。很慢却是很直观