文章目录
- 1.打印出一个元素不重复的数组的所有子集
- 1.1 代码
- 1.2 思路
- 1.3 总结
1.打印出一个元素不重复的数组的所有子集 1.1 代码
1.2 思路
- 递归打印子集:
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) }
- step1:
- 初始时,传入原数组,和一个空的子集。
文章图片
- step2:
- 分别取出下标为index的元素到数组截止的元素,加到当前子集中,作为下次递归打印的子集。一共会产生3个递归。
- 注意:当index大于范围将不再产生递归,所以递归是有限的不是无限循环的。第3个递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
文章图片
- step3:
- 针对step2的第一个继续分析:
- 继续对其执行执行step2,会产生2个递归。其中第2个递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
文章图片
【打印出一个元素不重复的数组的所有子集】
- step4:
- 针对step3的第一个继续分析:
- 继续对其执行执行step2,会产生1个递归。且该递归的index大于目标数组范围,在打印完子集后,将不再产生新的递归。
文章图片
1.3 总结
- step5:
- 将上述中所有递归执行完毕,即打印完了所有子集。
- 算法的实现就是每次循序都是将目标数组index开始到数组截止的元素,依次取出,与现有子集组成新的子集,然后递归。
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络