LeetCode 78. 子集(回溯)

文章目录

    • 1. 题目信息
    • 2. 解题
      • 2.1 暴力回溯
      • 2.2 循环
      • 2.3 位运算

1. 题目信息

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:输入: nums = [1,2,3]
输出:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 暴力回溯

在这里插入图片描述

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<int> sub;vector<vector<int>> ans;bt(nums, sub, ans, 0);return ans;}void bt(vector<int>& nums, vector<int> sub, vector<vector<int>> & ans, int i){if(i == nums.size()){ans.push_back(sub);return;}bt(nums, sub, ans, i+1);//不加入nums[i]sub.push_back(nums[i]);bt(nums, sub, ans, i+1);//加入nums[i]}
};

or

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<int> sub;vector<vector<int>> ans;ans.push_back({});bt(nums,sub,ans,0);return ans;}void bt(vector<int>& nums,vector<int> sub, vector<vector<int>> &ans, int i){for(int idx = i; idx < nums.size(); ++idx){sub.push_back(nums[idx]);ans.push_back(sub);bt(nums,sub,ans,idx+1);sub.pop_back();}}
};

2.2 循环

在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;ans.push_back({});vector<int> sub;int i, j, n;for(i = 0; i < nums.size(); ++i){n = ans.size();//注意提前记录sizefor(j = 0; j < n; ++j){sub = ans[j];sub.push_back(nums[i]);ans.push_back(sub);}}return ans;}
};

2.3 位运算

  • 对例子来讲,一共8种情况,对应的二进制位:000,001,010,011,100,101,110,111
  • 每次内层循环,把为1的位对应的数字取出来,就是所有组合
class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i, j, k = pow(2,nums.size());for(i = 0; i < k; ++i){vector<int> sub;for(j = 0; j < nums.size(); ++j){if(i & (1<<j))sub.push_back(nums[j]);}ans.push_back(sub);}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EMNLP'20最佳论文揭晓!八块肌肉=能打电话?!

文 | 小轶(y)背景今天上午十点刚刚颁布的EMNLP 2020最佳论文&#xff0c;获奖者是来自UCBerkeley团队的这篇Digital Voicing of Silent Speech。刷了那么多NLP论文&#xff0c;各种pretraining、BERT、XXX-former...是不是都快刷出审美疲劳了&#xff1f;今年的EMNLP best pape…

空洞卷积相关理解

多标签文本分类&#xff1a;基于语义单元的空洞卷积&#xff1a;https://zhuanlan.zhihu.com/p/50231229?utm_sourceweibo 原文链接&#xff1a;https://www.jianshu.com/p/f743bd9041b3 扩展阅读&#xff1a;https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/7982559…

2019 最全阿里天猫Java 3面真题,含面试题答案!

1 阿里天猫Java一面 自我介绍 jvm GC原理&#xff0c;JVM怎么回收内存 ConcurrentHashMap是怎么解决并发问题的&#xff1f; HashMap怎么从链表转换为红黑树&#xff1f;如果存入的是null键&#xff0c;放在桶的哪个位置&#xff1f; 谈谈Synchronized与ReentrantLock的区别…

NumPy快速入门--形状操作

文章目录1. 更改数组的形状2. 将不同数组堆叠在一起3. 将一个数组分成几个较小的数组1. 更改数组的形状 >>> import numpy as np >>> a np.floor(10*np.random.random((3,4))) >>> a array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]]…

深度学习语义分割理论与实战指南.pdf

深度学习语义分割理论与实战指南 V1.0 版本已经完成&#xff0c;主要包括语义分割概述、关键技术组件、数据模块、经典分割网络与架构、PyTorch基本实战方法等五个部分。获取方式&#xff1a;扫描关注下方公众号回复 语义分割 即可。图像分类、目标检测和图像分割是基于深度学习…

Jedis工具类

目录 一、基本使用 1、xml 引入依赖 2、简单测试 二、工具类 1、编写redis属性文件 2、编写工具类 3、使用测试 Jedis是Redis官方推荐的Java连接开发工具。 一、基本使用 1、xml 引入依赖 <dependencies><dependency><groupId>redis.clients</gr…

最新鲜的美团Java面试41题(三面技术+HR面):Redis+Kafka+分布式

Java一面 hashmap与concurrenthashmap的区别 垃圾回收算法以及垃圾回收器 CMS的回收步骤 G1和CMS的区别 CMS哪个阶段是并发的哪个阶段是串行的&#xff1f; G1内部是如何分区的&#xff08;region&#xff09; HashMap如何解决Hash冲突 my sql 索引类别 什么是覆盖索引…

今年阿里双十一提升广告点击率居然用的是这种算法?!

文 | 阿里巴巴定向广告团队源 | 知乎写在前面的碎碎念这篇文章主要是介绍我们在CTR建模领域最新的工作CAN&#xff0c;CAN已经在双十一前全面在阿里定向广告落地&#xff0c;在线效果提升非常显著。一般文章会以事后的视角来写&#xff0c;这样思考会更完整&#xff0c;会屏蔽掉…

Spring之AOP实现

文章目录前言环境搭建前置业务类编写一、注解实现AOP1.编写注解实现的增强类2.在Spring配置文件中&#xff0c;注册bean&#xff0c;并增加支持注解的配置3.测试二、配置文件实现AOP1.编写自定义增强类2.Spring配置文件中&#xff0c;注册bean&#xff0c;配置增强2.测试总结前…

LeetCode 90. 子集 II(回溯+剪枝)

文章目录1. 题目信息2. 解题2.1 循环2.2 回溯1. 题目信息 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例:输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2…

BAT研发Java面试36题总结:Spring+Redis+Docker+Dubbo

一面&#xff1a; ArrayList和linkedlist区别。ArrayList是否会越界。 ArrayList和hashset有何区别。hashset存的数是有序的么。 volatile和synchronized区别 多态的原理 数据库引擎Innodb和myisam区别 Redis的数据结构 Redis是基于内存的么 Redis的list zset的底层实现…

中文版GPT-2,可用于写小说、诗歌、新闻等

原文链接&#xff1a;https://www.sohu.com/a/336251713_610300 有人做出了中文版GPT-2&#xff0c;可用于写小说、诗歌、新闻等&#xff1b;15亿参数版GPT-2被两名研究生复现 2019-08-25 12:01 来源:量子位 </div>原标题&#xff1a;有人做出了中文版GPT-2&#xff0…

一份来自清华的数据分析笔记,请查收!

之前发过很多数据分析的文章&#xff0c;收到不少好评&#xff0c;但也有一些困惑&#xff1a;入门数据分析该学哪些知识点&#xff1f;该看哪些书&#xff1f;是从 Python入手还是 R 语言&#xff1f;常用的算法有哪些&#xff1f;练手做项目的数据库去哪里找&#xff1f;好用…

LeetCode 9. 回文数

文章目录1. 题目信息2. 解题1. 题目信息 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1:输入: 121 输出: true 示例 2:输入: -121 输出: false 解释: 从左向右读, 为 -121 。 …

Redis系列教程(四):Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因 1.redis是基于内存的&#xff0c;内存的读写速度非常快&#xff1b; 2.redis是单线程的&#xff0c;省去了很多上下文切换线程的时间&#xff1b; 3.redis使用多路复用技术&#xff0c;可以处理并发的连接。非阻塞IO 内部实现采用epoll&#xff0c;采…

Bing与DuckDuckGo搜索结果惊人一致?Google展现强势差异

文 | 乐乐QvQ搜索引擎之间有何不同&#xff1f;随着世界上最大的两家公司Google和Microsoft争夺Web Search空间的愈发激烈&#xff0c;一超多强的搜索格局已经形成。在目前眼花缭乱的搜索市场中&#xff0c;是搜索结果的千篇一律&#xff0c;九九归一&#xff1b;还是搜索结果的…

图解gpt-2

原文链接&#xff1a;https://www.sohu.com/a/336262203_129720 完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff09; 2019-08-25 12:47 来源:机器之心Pro </div>原标题&#xff1a;完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff0…

java程序员学习路线以及我的学习经验

本文作者为优知学院创始人陈睿&#xff08;mike&#xff09;,作者有10年以上技术&产品经验&#xff0c;曾任百度研发经理、携程定制旅游CTO。 “ 这是一篇完整的java程序员学习线路图&#xff0c;一共分为六个阶段。 我以java为例&#xff0c;展示完整的学习步骤。 最后…