当前位置: 首页 > news >正文

LeetCode知识点总结 - 78

LeetCode 78. Subsets

考点难度
ArrayMedium
题目

Given an integer array nums of unique elements, return all possible subsets (the power set).

The solution set must not contain duplicate subsets. Return the solution in any order.

思路

backtracking: an algorithm for finding all solutions by exploring all potential candidates. If the solution candidate turns to be not a solution (or at least not the last one), backtracking algorithm discards it by making some changes on the previous step, i.e. backtracks and then try again.
function backtrack(first, curr) 的作用是给定subset的长度,找到所有这个长度的subset。
对于一个combination,如果没有达到要求的长度就加element到这个combination。找到一个符合的subset后把这个subset append到array里,然后backtrack(pop掉最后一个数)再继续找其他subset。first指的是新加入的第一个element的index。
k的范围是range(n + 1),因为subset的长度可以从0n

答案

简单的方法:

class Solution:
    def subsets(self, nums):
        result = [[]]
        for number in nums:
            for i in result:
                # append (i in result list + number) to result list
                result = result +[i + [number]]
        return result

backtrack:

class Solution:
    def subsets(self, nums):
        def backtrack(first = 0, curr = []):
            # if the combination is done
            if len(curr) == k:  
                output.append(curr[:])
                return
            for i in range(first, n):
                # add nums[i] into the current combination
                curr.append(nums[i])
                # use next integers to complete the combination
                backtrack(i + 1, curr)
                # backtrack
                curr.pop()
        
        output = []
        n = len(nums)
        for k in range(n + 1):
            backtrack()
        return output

相关文章:

  • 2023社招——特博赛科技FPGA工程师(笔试题目)
  • 机器学习量化前的准备——全球指数数据篇
  • GreatDB同类产品方案
  • 交换机与路由器技术-36-端口镜像
  • Linux Redis集群配置
  • 【电商数仓】日志采集架构设计原理、系统表结构解析、数仓分层相关概念、范式理论详解
  • 【C++修炼秘籍】C++入门,初入山门(下)
  • 个人一些教学、生活中的非专业技术案例
  • java毕业设计美容院管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  • C++ 中的万能引用、引用折叠、完美转发
  • 软件架构模式
  • Eclipse Theia技术揭秘——脚手架源码分析
  • React AntV/G2Plot环形图Pie添加点击事件,即点击图环触发获取相关数据。
  • 导航【Java设计模式】
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [数据结构]链表的实现在PHP中
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Elasticsearch 参考指南(升级前重新索引)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JSONP原理
  • Laravel 菜鸟晋级之路
  • mysql 5.6 原生Online DDL解析
  • sessionStorage和localStorage
  • Vue 动态创建 component
  • 前端之Sass/Scss实战笔记
  • 深入浅出Node.js
  • 双管齐下,VMware的容器新战略
  • 王永庆:技术创新改变教育未来
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一个项目push到多个远程Git仓库
  • 移动端解决方案学习记录
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用element的upload组件实现多图片上传和压缩
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #stm32驱动外设模块总结w5500模块
  • (12)Hive调优——count distinct去重优化
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (rabbitmq的高级特性)消息可靠性
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (五)网络优化与超参数选择--九五小庞
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)jQuery 基础
  • (转)Windows2003安全设置/维护