backtracking及其应用2
文章目录
- Subsets
- Subsets II
接上文: backtracking及其应用
Subsets
链接:https://leetcode.com/problems/subsets/
如果没有接触过backtracking,这道题的常规解法应该是位操作
func subsets(nums []int) [][]int {lth := len(nums)cnt := int(math.Pow(float64(2), float64(lth)))bits := getBits(cnt, lth)var res [][]intfor i := 0; i < cnt; i++ {var tmp []intfor j := 0; j < lth; j++ {if bits[i][j] == 1 {tmp = append(tmp, nums[j])}}res = append(res, tmp)}return res
}func getBits(cnt int, lth int) [][]int {res := make([][]int, 0, cnt)for i := 0; i < cnt; i++ {j := itmp := make([]int, lth)for k := lth-1; k >= 0; k-- {power := int(math.Pow(float64(2), float64(k)))tmp[k] = j / powerj -= power * tmp[k]}res = append(res, tmp)}return res
}
对位操作熟悉的,可以优化下上面的代码
func subsets(nums []int) [][]int {lth := len(nums)cnt := 1 << lthres := make([][]int, cnt)for i := 0; i < cnt; i++ {var tmp []intfor j := 0; j < lth; j++ {if i >> j & 1 > 0 {tmp = append(tmp, nums[j])}res[i] = tmp}}return res
}
最后给下backtracking的解法
func subsets(nums []int) [][]int {var res [][]intvar tmpList []intres = backtrack(res, tmpList, nums, 0)return res
}func backtrack(res [][]int, tmpList []int, nums []int, start int) [][]int {res = append(res, construct(tmpList))for i := start; i < len(nums); i++ {tmpList = append(tmpList, nums[i])res = backtrack(res, tmpList, nums, i+1)tmpList = tmpList[0:len(tmpList)-1]}return res
}func construct(list []int) []int {res := make([]int, len(list))for i := 0; i < len(list); i++ {res[i] = list[i]}return res
}
Subsets II
链接:https://leetcode.com/problems/subsets-ii/
基于Subsets的backtracking解法 ,这道题就简单多了
【仅贴下不同的地方】
backtracking及其应用2相关推荐
- [LeetCode] 93. Restore IP Addresses_Medium tag: backtracking
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- 数据结构与算法(Python)– 回溯法(Backtracking algorithm)
数据结构与算法(Python)– 回溯法(Backtracking algorithm) 1.回溯法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条 ...
- JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码) backtrackingJumpGame.js完整源代码 backtrackingJumpGame. ...
- JavaScript实现使用 BACKTRACKING 方法查找集合的幂集算法
JavaScript实现使用 BACKTRACKING 方法查找集合的幂集算法(附完整源码) btPowerSet.js完整源代码 btPowerSet.test.js完整源代码 btPowerSet ...
- LeetCode——Backtracking
Backtracking 目录 Backtracking 数字键盘组合 IP 地址划分 在矩阵中寻找字符串 输出二叉树中所有从根到叶子的路径 排列 含有相同元素求排列 组合 组合求和 含有相同元素的组 ...
- backtracking算法
详解backtracking 搞清楚回溯体,穷举多维度值,维度一定会加一 数值一定很小.搞清楚怎么处理输入输出. 有一定的模版. uva,112 这种思想和获取方式是我所追求的. 1 #include ...
- 递归算法(三)- 回溯法Backtracking
回溯法 回溯法Backtracking(找所有的可能)递归: 类似枚举,一层一层向下递归,尝试搜索答案. 找到答案: => 返回答案,并尝试别的可能 未找到答案: => 返回上一层递归,尝 ...
- 回溯法|Backtracking
回溯法 回溯是一种算法,用于捕获给定计算问题的部分或全部解决方案,特别是约束满足问题.该算法只能用于能够接受"部分候选解"概念的问题,并允许快速测试候选解是否可以是一个完整的解.回 ...
- Handbook of Constraints Programming——Chapter4 Backtracking Search Algorithms-Preliminaries
来源:F.Rossi, P.Van Beek, T. Walsh. Handbook of Constraints Programming. Elsevier, 2006. There are thr ...
- 【DFS + Backtracking】LeetCode 79. Word Search
LeetCode 79. Word Search Solution1:我的答案 DFS + Backtracking class Solution { public:bool exist(vector ...
最新文章
- java 无符号转有符号_java有符号无符号的转换
- 对话创新工场陶宁:AI步入深水区下的投资逻辑
- c索引超出了数组界限_关于MATLAB逻辑数组索引的二三事(二)
- 备份Foxmail7.2邮箱
- 电话拦截以及电话拦截后的提示音
- hadoop中MapReduce多种join实现实例分析
- SSH集成项目,使用注解方式,竟然还有这样的问题!!
- 虚拟机 VMware 16安装教程
- matlab交流电路仿真,单相交流调压电路Matlab仿真
- [计算机网络】【网络设备】VTP
- 互联网最值得加入的 173 家国企汇总!!
- 一天设计100张海报?so easy
- [深度分析]我对区块链的认识--概述(一)
- 指针式仪表识别读数 Python
- 如何正确使用移动硬盘
- 虚拟机安装Hadoop
- oracle crs的管理,crs之上resource管理命令介绍
- 逻辑分区转化为主分区
- 梅科尔工作室-鸿蒙笔记1
- 离散余弦变换(DCT)的C++实现
热门文章
- JAVA的多线程、死锁、线程间通信、如何规避死锁、线程安全的单例模式
- 四大亮点不容错过,TDengine 开发者大会全议程公布!
- 6a标准 api_API6A标识规范(最新)
- 简易电子邮件收信的原理以及实现
- 知到网课葡萄酒的那些事儿考试试题(含答案)
- emacs org-mode table使用
- 2022年全球及中国手持超声设备行业头部企业市场占有率及排名调研报告
- micropython gui_T-Watch手表初试micropython之电子秤教程
- 在echarts中使用百度地图,卫星地图
- 魔性,用 Python 实现火爆全网的「蚂蚁呀嘿」视频特效!