Subsets 求子集 @LeetCode

Java版回溯法求子集和Demo 从X{a1,a2,a3,...,an}集合用回溯法按照升序或降序找出和的第一个子集,可设置最大求解时间。 立即下载
package Level3;

/**
 * Subsets
 * 
 * Given a set of distinct integers, S, return all possible subsets.

Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3], a solution is:

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]
 * 
 */

import java.util.ArrayList;
import java.util.Arrays;

public class S78 {

	public static void main(String[] args) {
		int[] S = {1,2,3};
		System.out.println(subsets(S));
	}

	public static ArrayList<ArrayList<Integer>> subsets(int[] S) {
		int len = S.length;
		ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
		Arrays.sort(S);
		
		// 利用2进制对应的bit来求所有subset,2进制中,0代表不选,1代表选择
		for(int i=0; i<Math.pow(2,len); i++){
			ArrayList<Integer> list = new ArrayList<Integer>();
			int tmp = i;
			// 对长为len的数,循环检查最右位是否为一
			for(int j=0; j<len; j++){
				int bit = tmp & 1;
				tmp >>= 1;
				if(bit == 1){
					list.add(S[j]);
				}
			}
			ret.add(list);
		}
		return ret;
    }
	
}



任何一个元素都可以放入子集,也可以不放入子集

package Recursion;

import java.util.ArrayList;
import java.util.List;

public class Subsets {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		subsets(list);
	}
	
	public static void subsets(List<String> list){
		ArrayList<ArrayList<String>> ret = new ArrayList<ArrayList<String>>();
		List<String> done = new ArrayList<String>();
		rec(done, list, ret);
//		System.out.println(ret);
		for (ArrayList<String> al : ret) {
			System.out.println(al);
		}
	}

	public static void rec(List<String> done, List<String> rest, ArrayList<ArrayList<String>> ret){
		if(rest.size() == 0){
			ret.add(new ArrayList<String>(done));
			return;
		}
		
		String head = rest.remove(0);
		done.add(head);
		rec(done, rest, ret);
		done.remove(done.size()-1);
		
		rec(done, rest, ret);
		rest.add(0, head);
	}
}


注意:

List<List<Integer>> ret = new ArrayList<List<Integer>>();


public class Solution {
    public List<List<Integer>> subsets(int[] S) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        Arrays.sort(S);   // to keep ascending order
        rec(S, ret, list, 0);
        return ret;
    }
    
    public void rec(int[] S, List<List<Integer>> ret, List<Integer> list, int pos) {
        if(pos >= S.length) {
            ret.add(new ArrayList<Integer>(list));
            return;
        }
        
        rec(S, ret, list, pos+1);
        
        list.add(S[pos]);
        rec(S, ret, list, pos+1);
        list.remove(list.size()-1);
    }
}




【AN7581】AN7581 SDK编译环境搭建操作说明 安装编译需要的工具包。 阅读详情

相关推荐

第二章 零差云控关节模组内部构造

对零差云控的eRob70I进行了拆解

SFY__优快云的博客 5975

leetcode 求子集

leetcode 78 – 求子集 双非普本想刷题,不会递归老是迷。 碰到乐扣求子集,不会做啊干着急。 题目描述(中等难度): 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 &lt

三少说 326

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9549

LeetCode子集、子集II的三种解法

文章目录子集解法一、DFS解法二、回溯解法三、枚举子集II解法一、DFS+HashSet判重解法二、回溯+排序解法三、枚举 子集 【题目描述】 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 【说明】: 解集不能包含重复的子集。 【示例】: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 【来源】 78. 子集 解法一、DFS 每一个数有选和不选两种选择,对于含重复元素的整数数

JohnnyLin 1051

UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()【已解决】

UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()【已解决】

围炉夜敲的博客 1万+

Java调用YOLOv26全解析:从ONNX模型部署到工业质检实战

本文分享了工业自动化领域使用Java调用YOLOv26进行零件缺陷检测的完整方案。通过YOLOv26s模型结合ONNX Runtime Java部署,误检率和漏检率显著降低(分别从12%降至2.1%,8%降至0.8%)。文章详细介绍了方案选型理由、环境配置避坑指南、ONNX模型导出步骤,以及Maven依赖配置(分CPU/GPU版本)。该方案直接在上位机Java环境中运行,避免了跨语言调用损耗,适合工业质检场景部署,提供了可复用的性能优化和多线程推理实现。

2601_94871597的博客 1108

90. 子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 <= nums.length <= 10 -10 <= nums[i] <= 10 解答 递归+回溯 class Sol

WhiteGray的博客 265

STM32 IIC电量计LTC2944

LTC2944是一款电池电量计,设计用于端电压为3.6V至60V的多节电池。它测量电池充电和放电、电池电压、电流和自身温度。精密模拟库仑计数器通过电池正极端子与负载或充电器之间的检测电阻器对电流进行积分。电池电压、电池电流和硅温度由内部ADC测量。

baidu_34971492的博客 3161

回溯法解算法题-leetcode中的组合排列求子集问题

回溯算法的模板: List<Object> list = new ArrayList<>(); public void backtrack(路径,选择列表){ //设置结束条件 if 满足结束条件{ lista.dd(路径); return; } //候选节点的选择 for(int i=start;i<选择列表的长度;i++){ //做选择 是否要将当前节点添加到list中

Lavender-csdn的博客 518

Qt —— QWebEngineView加载谷歌离线地图(包含离线地图瓦片下载制作、附谷歌地图开发文档)

  关注 微信公众号搜索"Qt_io_"或"Qt开发者中心"了解更多关于Qt、C++开发知识.。 笔者 - jxd

1万+

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 380

leetcode 数组求子集(subset)

描述一个数组,求它的子数组,包括空集. 解法对数组里的数一个一个的添加进结果集,每添加一个,复制前面所有的list,并将新的元素复制给每一个copy的list,再添加新元素作为单独子集,所有元素遍历完成之后,再添加空集即可. 举例数组S [1, 2, 3]{1}{1,2}{2}{1,3}{1,2,3}{2,3}{3}{} 代码public ArrayList<ArrayList<Integer>>

Tsongski的专栏 1239

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Subsets II 求有重复元素的集合的子集 @LeetCode

与之前的Subsets题相比,改用HashSet来作为天然的过滤。 package Level4; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Subsets II * * Given a colle

3055

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Subsets II @Leetcode

Subsets II  //Given a collection of integers that might contain duplicates, nums, return all possible subsets. //For example, If nums = [1,2,2], a solution is: [ /**   [2],   [1],   [1,2,2],  

Hanwenwangad的专栏 458

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【LeetCode 78】 ——求子集 (两种解法)

求子集 思路一:(一切尽在调试中,一个一个的把它带出来,我不知道咋说,反正就是那么个意思,但要注意的是最先开始要给存放结果的vector一个空间) class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vect...

Vicky_Cr的博客 446

LeetCode 90 Medium 求子集2 Python

方法一:     算法:递归/回溯     思路:         和第78题,求子集思路类似,但是不同的是这里要【去重】,以及【排序】             n个元素的集合子集数目有2^n次方个,但是由于集合中有重复元素,所以实际的集合数目达不到这么多         最直观的去重思想就是用set✅,但是要注意在python中,list对象是不能放到set中的,所以放到      ...

h 609

LeetCode 78求子集

题目链接:https://leetcode-cn.com/problems/subsets/ description: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 思路: ...

EmotionComputer 441

leetcode78 求子集

问题描述:输入一个不包含重复数字的数组,要求输出这些数字的所有子集。 例子:输入[1,2,3],应输出8个子集,包含空集和自身。 [ [],[1],[2],[3],[1,3],[2,3],[1,2],[1,2,3] ] 【思路1】递归/迭代 从空集开始,保存当前集合到res,遍历下一个元素并添加到所有当前子集,重复红字直至最后。 public List<List<Integer>> subsets(int[] nums) { List<List<Integer>&g

蜗牛君 320

算法----递归求子集

#include&lt;stdio.h&gt; #include&lt;string.h&gt; char s[50]; int index = 0;//标记选择后的字符下标 void reSort(char *pArray, int begin,int pLen , int len) { if (pLen == 0) { puts(s); return; } for (i...

风清扬 3383

今天写了递归求子集程序

原来对算法理解太弱了,就没有思路的 // generate all subsets of n elements #include // define globalsint x[20],  // subset vector    n;      // number of elements void Subsets(int i){// Output all subsets of x[1:n]. //

老实技术男 2407

LeetCode 78. Subsets (位运算入门:利用位运算求子集)

78.Subsets Medium 163241FavoriteShare Given a set ofdistinctintegers,nums, return all possible subsets (the power set). Note:The solution set must not contain duplicate subsets. Example: I...

gh6267的博客 1092

LeetCode78--求子集

这道题目一看我,我的第一想法就是递归 public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> alllist=new ArrayList<>(); alllist.add(new ArrayList<Intege...

weixin_42113372的博客 225

Python LeetCode求子集

def subsets(nums): item = [] result = [] result.append(item) def generate(i, nums): if i >= len(nums): return item.append(nums[i]) result.append(list(item)) generate(i + 1, nums) item.

ALakers的博客 683

输入一个字符串,求出该字符串包含的字符集合,例如:输入 abcqwerabc ,输出,acbwqer

方法一: 设置一个bool数组,用来记录字符的置为,初始化为false、 bool vis[74] = { false }; 设置一个num字符数组记录需要输出的字符 char num[55]; 设置一个字符数组, 并输入 char ch[101]; cin >> ch; 遍历字符串,利用ASCII码值给相应的字符置位 for (int i = 0; ch[i]; i++...

persistence_Y的博客 2254

Valid Number 判断一个string是不是有效地数字表达式 @LeetCode

这道题看了看网上的解法,很多都做得很麻烦。其实我觉得,这道题就是考察正则表达式。 package Level2; /** * Valid Number * * Validate if a given string is numeric. Some examples: "0" => true " 0.1 " => true "abc" => false "1 a" =>

1万+
上一篇: Combinations 求1...n中k长度的组合 @LeetCode
下一篇: Word Search 在一个二维字符矩阵里找单词 @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值