但是该算法存在一个巨大的缺陷,就是重用性很低,如果计算的位数越高,所嵌套的循环层数越多,这样会导致程序的复杂度增高,所以建议采用一下的通用性算法:
java算法题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
在网上看到许多该算法的讲解都是依靠以下算法实现:
但是该算法存在一个巨大的缺陷,就是重用性很低,如果计算的位数越高,所嵌套的循环层数越多,这样会导致程序的复杂度增高,所以建议采用一下的通用性算法: private void getNumCount(List numList, int median, int currNum) { if (median == 1) { for (int i = 0; i < numList.size(); i++) { int result = currNum + numList.get(i); count++; System.out.println("第" + count + "个数为:" + result); } } else { for (int i = 0; i < numList.size(); i++) { int medianNum = numList.get(i); int result = (int)(currNum + medianNum * Math.pow(10, median - 1)); //传入list的一个拷贝(直接传入上级的list,会出现每个层级剩下的数据错误) List list = new ArrayList(); for (Integer num: numList) { int copyNum = num; if (copyNum != medianNum) { list.add(copyNum); } } getNumCount(list, median - 1, result); } } } 该算法摒弃了循环嵌套的方式,引用递归算法,将这个数的位数构成一棵树型,然后遍历该树,就得到了所需要的数据,树型如下图:
但是该算法存在一个巨大的缺陷,就是重用性很低,如果计算的位数越高,所嵌套的循环层数越多,这样会导致程序的复杂度增高,所以建议采用一下的通用性算法: