backtracking及其应用2

article/2025/9/23 6:27:48

文章目录

    • 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解法 ,这道题就简单多了
【仅贴下不同的地方】
在这里插入图片描述


http://chatgpt.dhexx.cn/article/TC1k7smU.shtml

相关文章

Backtracking algorithm梳理

回溯法简介 注意下面这句话 由于回溯通常结果集都记录在回溯树的路径上&#xff0c;因此如果不进行撤销操作&#xff0c; 则可能在回溯后状态不正确导致结果有差异&#xff0c; 因此需要在递归到底部往上冒泡的时候进行撤销状态。 如果你每次递归的过程都拷贝了一份数据&#x…

ARM backtrace 实战分析

记录一下arm backtrace 分析过程 前言 嵌入式开发中&#xff0c;如果发生异常如内存访问越界等情况&#xff0c;有时会非常难debug到底是哪里出错&#xff0c;近来看了一下back trace回溯的功能及实现,在这里做个笔记。 backtrace就是回溯堆栈&#xff0c;简单的说就是可以列…

backtrack 5 r3

1.BT5默认用户名:root.密码:toor(公司是yeslabccies) 2.进入图形化界面命令:startx 3.更改密码&#xff1a;sudo passwd root 扫描工具 第一部分网络配置&#xff1a; 4.网络配置文件有两个&#xff1a; /etc/network/interfaces 和 /etc/resolv.conf 前一个存放网卡接口…

backtrack3安装使用教程

一、准备篇 1、一个有可破解无线信号的环境。如我在家随便搜索出来的信号。 2、带无线网卡的电脑一台&#xff08;笔记本台式机均可&#xff0c;只要无线网卡兼容BT3&#xff09;&#xff0c;我用的是三星R467的上网本。  3、2G以上优盘一个&#xff08;我用的是2G的&#x…

安装BackTrack5 R3

最近买了本《Python绝技》&#xff0c;里面的很多实例都是在BackTrack系统中运行的。初次接触BackTrack系统&#xff0c;才知道它是一套专业的计算机安全检测的Linux操作系统&#xff0c;内部集成了200多种安全检查工具。虽然现在BackTrack已经被Kali Linux所代替&#xff0c;不…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

小白使用backtrack5

在此先感谢飞飞老师录制的教学视频 在这几天的了解中知道了这样一个过程 linux–>Debian–>Ubuntu–>backtrack–>kali 可能理解有点片面&#xff0c;但是可以让我了解到linux系统是基础&#xff0c;而且linux的内核大部分都是用C写的&#xff0c;部分是汇编语言…

虚拟机安装BackTrack 5 的教程详解!

废话不多说&#xff0c;直接上教程&#xff01;如在安装过程中有些步骤界面没显示&#xff0c;即直接下一步即可。 打开虚拟机&#xff0c;新建虚拟机 选择自定义安装 选择你的映像文件&#xff0c;点击下一步 这里要注意了&#xff0c;系统选择Linux&#xff0c;版本选择U…

struts2漏洞升级至2.5.30额外补充

由于部分老项目需要还在使用struts2框架&#xff0c;由于最新发布struts2漏洞&#xff0c;需要将其版本升级至struts2.5.30&#xff0c;同步还有其他依赖和配置需要调整&#xff0c;大概可参考这个文章&#xff1a; struts升级至2.5.26遇到的各种bug及解决方案_谷同学的博客-C…

linux struts2漏洞,Struts2漏洞分析,漏洞波及全系版本

Struts漏洞分析 Apache Struts团队已经发布了Struts 2.3.15.1安全更新版本。在Struts2.3.15.1版本之前&#xff0c;存在着严重的安全漏洞&#xff0c;如果现在一些比较大的网站是用JAVA做的&#xff0c;没有把版本升级&#xff0c;还用的是Strtus2.3.15.1版本之前的话&#xff…

渗透知识-Struts2漏洞

Struts2漏洞利用实例 如果存在struts2漏洞的站&#xff0c;administrator权限&#xff0c;但是无法加管理组&#xff0c;内网&#xff0c;shell访问500. 1.struts2 漏洞原理&#xff1a;struts2是一个框架&#xff0c;他在处理action的时候&#xff0c;调用底层的getter/sette…

Struts2 远程代码执行漏洞复现(附Struts2漏洞检测工具)

0x00 Struts2 简介 Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架&#xff0c;本质上相当于一个 servlet。Struts2 基于 MVC 架构&#xff0c;框架结构清晰。通常作为控制器&#xff08;Controller&#xff09;来建立模型与视图的数据交互&#xff0c;用…

Struts2漏洞利用原理

概述: Struts2是apache项目下的一个web 框架,目前web框架中非常流行的都是mvc设计模式、经典例子例如:python的Django、Flask;java的ssm等。因为使用MVC设计模式,所以在框架内部处理用户数据流参数的事后就不可避免的存在数据在不同层次流转的问题。struts2作为java的一款成…

Struts2漏洞 - Struts2-015 Struts2-016 Struts2-045

文章目录 Struts2简介Struts2历史漏洞Struts2历史漏洞发现Struts2框架识别 Struts2历史漏洞利用Struts2-015漏洞简介影响范围环境搭建漏洞复现 Struts2-016漏洞简介影响范围环境搭建漏洞复现 Struts2-045漏洞简介影响范围环境搭建漏洞复现 Struts2简介 Apache Struts是美国阿帕…

Struts2漏洞S2-005复现

1.漏洞描述 s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12)&#xff0c;struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象&#xff0c;struts框架通过过滤#字符防止安全问题&#xff0c;然而通过unicode编码…

Struts2 漏洞集合

Struts2 漏洞集合 总结了一部分 Strtus2 漏洞&#xff0c;虽然现在这部分的漏洞很少了&#xff0c;但也是学习的一部分&#xff0c;收集的并不全面&#xff0c;后续会做补充。 漏洞环境搭建可以使用在线的 Vulfocus &#xff0c;或者使用docker部署 S2-001 &#xff08;CVE-…

Vulhub靶场之struts2漏洞复现

简介 struts2漏洞中属s2系列杀伤力最大&#xff0c;可以造成远程命令执行漏洞。 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530)&#xff0c;在使用某些tag等情况下可能…

java struts2 漏洞_Struts2漏洞利用

Struts漏洞合集 Struts-S2-013漏洞利用 受影响版本 Struts 2.0.0 - Struts 2.3.14.1 漏洞利用 任意命令执行POC&#xff1a; ${(#_memberAccess["allowStaticMethodAccess"]true,#ajava.lang.RuntimegetRuntime().exec(id).getInputStream(),#bnew java.io.InputStre…

struts2漏洞监测_全版本struts2漏洞练习

docker中有struts2全版本的漏洞平台 1、首先在docker中进行下载&#xff1a; # docker pull 2d8ru/struts2 2、其次运行&#xff1a;(48729为物理机的端口&#xff0c;可随意指定) # docker run --name struts2 -p48729:8080 -d 2d8ru/struts2 3、下载struts2漏洞扫描工具&…

Struts2漏洞复现

一. S2-016复现 打开测试靶场&#xff0c;测试该网站存在index.action路径 漏洞原理: 参数action的值redirect以及redirectAction没有正确过滤&#xff0c;导致ognl代码执行 测试POC&#xff1a; 2.1 /index.action?redirect:%25{3*4}2.2 /index.action?redirect:%…