leetcode473. 火柴拼正方形(回溯算法-java)
火柴拼正方形
- leetcode473 火柴拼正方形
- 题目描述
- 回溯算法
- 上期经典算法
leetcode473 火柴拼正方形
难度 - 中等
原题链接 - leetcode473 火柴拼正方形
题目描述
你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍 拼成一个正方形。你 不能折断 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 使用一次 。
如果你能使这个正方形,则返回 true ,否则返回 false 。
示例1:
输入: matchsticks = [1,1,2,2,2]
输出: true
解释: 能拼成一个边长为2的正方形,每边两根火柴。
示例 2:
输入: matchsticks = [3,3,3,3,4]
输出: false
解释: 不能用所有火柴拼成一个正方形。
提示:
1 <= matchsticks.length <= 15
1 <= matchsticks[i] <= 1e8

回溯算法
这个题的意思可以转换为,将数组分为四个相等的数组。
用回溯算法,进行选择。先看下回溯算法的基本流程。
废话不多说,直接上回溯算法框架,解决一个回溯问题,实际上就是一个决策树的遍历过程,站在回溯树的一个节点上,你只需要思考 3 个问题:
1.路径:也就是已经做出的选择。
2.选择列表:也就是你当前可以做的选择。
3.结束条件:也就是到达决策树底层,无法再做选择的条件。
代码框架
result = []
def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor 选择 in 选择列表:做选择backtrack(路径, 选择列表)撤销选择
代码:
int n ,t;int[]_nums;public boolean makesquare(int[] nums) {if(nums.length < 4){return false;}int sum = 0;for(int i = 0; i < nums.length;i++){sum += nums[i];}if(sum % 4 != 0){return false;}Arrays.sort(nums);_nums = nums;n = nums.length;t = sum / 4;return dfs(n - 1,0,0,new boolean[n]);}/**** @param index* @param cur 当前元素和* @param cnt 已经凑够几个和为t的集合。* @param vis 标记哪些元素被使用过了。* @return*/boolean dfs(int index,int cur,int cnt,boolean[]vis){if (cnt == 4){return true;}if (cur == t){return dfs(n - 1,0,cnt + 1,vis);}for (int i = index;i >= 0;i--){if (vis[i] || cur + _nums[i] > t){continue;}vis[i] = true;if (dfs(i - 1,cur + _nums[i],cnt,vis)){return true;}vis[i] = false;if (cur == 0){return false;}}return false;}
上期经典算法
leetcode292. Nim 游戏
相关文章:
leetcode473. 火柴拼正方形(回溯算法-java)
火柴拼正方形 leetcode473 火柴拼正方形题目描述回溯算法 上期经典算法 leetcode473 火柴拼正方形 难度 - 中等 原题链接 - leetcode473 火柴拼正方形 题目描述 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍…...
git-fatal: No url found for submodule path ‘packages/libary‘ in .gitmodules
文章目录 前言一、git submodule功能使用二、错误信息:三、解决方法:四、.gitmodules配置文件:总结 前言 最近在做vue项目,因为项目比较复杂,把功能拆分成很多子模块,我们使用Git的submodule功能。遇到错误…...
Android开发之性能优化:过渡绘制解决方案
1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次,就是过渡绘制。 下图中多个卡片跌在一起,但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制,接着再将上层的卡片进行绘制。但其…...
Wireshark 抓包过滤命令汇总
Wireshark 抓包过滤命令汇总 Wireshark 是一个强大的网络分析工具,它可以帮助网络管理员和安全专家监控和分析网络流量。通过捕获网络数据包,Wireshark 能够帮助我们识别网络中的问题、瓶颈以及潜在的安全威胁。在使用 Wireshark 进行网络数据包分析时&…...
配资平台app(正规股票配资软件)架构是怎么搭建的?
随着股票市场的发展,越来越多的投资者开始尝试使用股票配资平台进行杠杆炒股,因此,搭建一套稳定、可靠的配资平台app架构显得尤为重要。本文将介绍配资平台app架构设计的关键要素,以及建立一个正规的配资平台app所需考虑的问题。 …...
【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:效率…...
神经网络基础-神经网络补充概念-57-多任务学习
概念 多任务学习(Multi-Task Learning,MTL)是一种机器学习方法,旨在同时学习多个相关任务,通过共享特征表示来提高模型的性能。在多任务学习中,不同任务之间可以是相关的,共享的,或…...
CMake教程6:调用lib、dll
之前我们学到了如何编写一个可执行程序和Library,在继续学习之前,需要解释下target,在cmake中我们可以给executable和library设置一个target名字,这样可以方便我们在后续对target进行更加详细的属性设置。 本节我们将学习如何在项…...
行业资讯丨“燃气智慧化”到底是什么?
文章来源:网络 关键词:智慧燃气、智慧燃气场站、设备设施数字化、数字孪生、工业互联网 带你了解燃气信息化 随着科技的不断进步和信息化的快速发展,各行各业都在积极探索如何将技术应用于业务中,以提高效率和服务质量。 燃气…...
angular注入方法providers
在Angular中有很多方式可以将服务类注册到注入器中: Injectable 元数据中的providedIn属性 NgModule 元数据中的 providers属性 Component 元数据中的 providers属性 创建一个文件名叫名 hero.service.ts叫 hero 的服务 hero.service.ts import { Injectable } from angular…...
Git提交规范指南
在开发过程中,Git每次提交代码,都需要写Commit message(提交说明),规范的Commit message有很多好处: 方便快速浏览查找,回溯之前的工作内容可以直接从commit 生成Change log(发布时用于说明版本…...
QT之UDP通信
QT之UDP通信 UDP不分客户端口服务器,只需要使用一个类QUdpSocket QT += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = udp TEMPLATE = app# The following define makes your compiler emit warnings if you use # any feature of Qt …...
一、进入sql环境,以及sql的查询、新建、删除、使用
1、进入sql环境 》》》mysql -u root -p 》》》输入密码 2、sql语言的分类 3、注意事项: 4、基础操作: (1)查询所有数据库: show databases; 运行结果: (2)创建一个新的数据库&…...
向日葵如何截图
场景 向日葵远程时,有时需要截图,但是客户电脑上没有qq、微信等软件提供快捷截图。 怎么办呢? 解决方案 其实向日葵肯定支持这些功能的。 设置 | 热键设置 | 勾选 远控其他设备时,可输入热键进行以下操作。 如果: altq 切换…...
固定资产折旧报表
SELECT * FROM SYS_ORGANIZATION -- OID、OCODE、ONAME、OATTRIBUT、FPC_USE_UNITNAME -- IS_DELETE 0 STATUS 1 SELECT * FROM FA_PROPERTY_CARD -- FPC_MANAGE_UNIT、FPC_ZJLY、FPC_ZJLYNAME、FPC_RESOURCE、FPC_MON_ZJE、FPC_SUMZJ、FPC_J…...
ubuntu18 下更改 mysql 数据目录
一、修改步骤 更改 MySQL 的数据目录需要注意以下几个步骤: 停止 MySQL 服务 在 Ubuntu 中,你可以使用以下命令停止 MySQL 服务: sudo systemctl stop mysql 复制现有数据 假设你的新的数据目录是 /new/dir/mysql,你应该使用 rsy…...
Arduino看门狗定时器WDT
Arduino - 看门狗定时器(WDT:Watch Dog Timer) 参考 看门狗定时器(WDT:Watch Dog Timer)实际上是一个计数器。 一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。 如果程序运行正常&…...
大数据岗位秋招面试八股文总结(不定时更新)
HIVE面试题 内部表和外部表的区别 未被external修饰的是内部表,被external修饰的是外部表; 内部表数据由Hive自身管理,外部表由HDFS管理; 删除内部表会直接删除元数据及存储数据,删除外部表,仅仅会删除…...
MATLAB高分辨率图片
把背景调黑,把曲线调黄,把grid调白,调调字体字号的操作 close all a0:0.1:10; noise2*rand(1,length(a)); bsin(a)sin(3*a)noise;plot(a,b,y,linewidth,2); ylim([-3 4]) %y轴范围 set(gca,xgrid,on,ygrid,on,gridlinestyle,-,Grid…...
Spring Clould 消息队列 - RabbitMQ
视频地址:微服务(SpringCloudRabbitMQDockerRedis搜索分布式) 初识MQ-同步通讯的优缺点(P61,P62) 同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话&…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

输入: matchsticks = [1,1,2,2,2]