题目描述(中等难度)

给一个数组,输出这个数组的所有子数组。

解法一 迭代一

77 题解法三一个思想,想找出数组长度 1 的所有解,然后再在长度为 1 的所有解上加 1 个数字变成长度为 2 的所有解,同样的直到 n。

假如 nums = [ 1, 2, 3 ],参照下图。

解法二 迭代法2

参照。解法一的迭代法,是直接从结果上进行分类,将子数组的长度分为长度是 1 的,2 的 …. n 的。我们还可以从条件上入手,先只考虑给定数组的 1 个元素的所有子数组,然后再考虑数组的 2 个元素的所有子数组 … 最后再考虑数组的 n 个元素的所有子数组。求 k 个元素的所有子数组,只需要在 k - 1 个元素的所有子数组里边加上 nums [ k ] 即可。

78. Subsets - 图1

解法三 回溯法

参考这里。同样是很经典的回溯法例子,添加一个数,递归,删除之前的数,下次循环。

解法四 位操作

前方高能!!!!这个方法真的是太太太牛了。参考。

数组的每个元素,可以有两个状态,子数组中和不在子数组中,所有状态的组合就是所有子数组了。

例如,nums = [ 1, 2 , 3 ]。1 代表在,0 代表不在。

同样是很经典的一道题,回溯,迭代,最后的位操作真的是太强了,每次遇到关于位操作的解法就很惊叹。

添加好友一起进步~

如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^

如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 查看详情