打印出一个元素不重复的数组的所有子集


文章目录

  • 1.打印出一个元素不重复的数组的所有子集
    • 1.1 代码
    • 1.2 思路
    • 1.3 总结

1.打印出一个元素不重复的数组的所有子集 1.1 代码
  • 递归打印子集:
fun printSubset(aimedArray: IntArray, index: Int = 0, subset: MutableList = mutableListOf()) { // 打印子集 println(subset.toString()) // 循环未放入子集的元素,依次取出一个放入子集中作为新的子集 for (i in index until aimedArray.size) { val newSubset = mutableListOf().apply { add(aimedArray[i]) addAll(subset) } printSubset(aimedArray, i + 1, newSubset) } }

  • 测试代码:
fun main() { val aimedArray = intArrayOf(1, 2, 3) printSubset(aimedArray) }

1.2 思路
  • step1:
  • 初始时,传入原数组,和一个空的子集。
打印出一个元素不重复的数组的所有子集
文章图片

  • step2:
  • 分别取出下标为index的元素到数组截止的元素,加到当前子集中,作为下次递归打印的子集。一共会产生3个递归。
  • 注意:当index大于范围将不再产生递归,所以递归是有限的不是无限循环的。第3个递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
打印出一个元素不重复的数组的所有子集
文章图片

  • step3:
  • 针对step2的第一个继续分析:
  • 继续对其执行执行step2,会产生2个递归。其中第2个递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
打印出一个元素不重复的数组的所有子集
文章图片

  • step4:
  • 针对step3的第一个继续分析:
  • 继续对其执行执行step2,会产生1个递归。且该递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
【打印出一个元素不重复的数组的所有子集】打印出一个元素不重复的数组的所有子集
文章图片

  • step5:
  • 将上述中所有递归执行完毕,即打印完了所有子集。
1.3 总结
  • 算法的实现就是每次循序都是将目标数组index开始到数组截止的元素,依次取出,与现有子集组成新的子集,然后递归。

    推荐阅读