目录
1. 题目来源
牛客网,集合的所有子集(一)
2. 普通方法
1. 思路
数学上排列组合中的组合,从N个元素的集合中拿出M(0≤ M ≤ N)个元素的可能数,标记为
。M从0开始遍历到N,就是所求的所有子集合。这里要结果不是数,而且取的元素集合。
这里具体在做的就是用遍历索引的方式取出想要的集合
- 比如数组为{1, 2, 3, 4, 5},要取0个数,那么所有可能就是{}。1个集合
- 比如数组为{1, 2, 3, 4, 5},要取1个数,那么所有可能就是{ {1}, {2}, {3}, {4}, {5}}。5个集合
- 比如数组为{1, 2, 3, 4, 5},要取2个数,那么所有可能就是{ {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}}。10个集合
- 比如数组为{1, 2, 3, 4, 5},要取3个数,那么所有可能就是{ {1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}}。10个集合
- 比如数组为{1, 2, 3, 4, 5},要取4个数,那么所有可能就是{ {1, 2, 3, 4}, {1, 2, 3, 5}, {1, 2, 4, 5}, {1, 3, 4, 5}, {2, 3, 4, 5}}。5个集合
- 比如数组为{1, 2, 3, 4, 5},要取5个数,那么所有可能就是{ {1, 2, 3, 4, 5}}。1个集合
2. 代码
import java.util.ArrayList; /** * @className SolutionTest * @description * @author liwei * @date 2022/9/8 15:29 * @version V1.0 **/ public class SolutionTest { public static void main(String[] args) { int[] ints = {5, 4, 3, 2, 1}; System.out.println(subsets(ints)); } public static ArrayList<ArrayList<Integer>> subsets(int[] ints) { // 插入排序,升序排列 for (int i = 0, length = ints.length; i < length - 1; i++) { int tmpValue = ints[i]; int tmpIndex = i; for (int j = i + 1; j < ints.length; j++) { if (tmpValue > ints[j]) { tmpValue = ints[j]; tmpIndex = j; } } if (i !