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) 同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话&…...
YOLOv11分割模型实战:从预测到训练,我的完整避坑与调优记录
YOLOv11分割模型实战:从预测到训练,我的完整避坑与调优记录 第一次接触YOLOv11分割任务时,我本以为会像使用常规检测模型那样顺利。直到实际跑通整个流程才发现,从环境配置到训练调优,每个环节都藏着意想不到的"坑…...
staticFunctional:嵌入式零堆内存的std::function替代方案
1. staticFunctional:嵌入式系统中零动态内存开销的 std::function 替代方案1.1 设计动因与工程痛点在资源受限的嵌入式系统(如 ARM Cortex-M0/M4、AVR、ESP32、Teensy 系列)中,std::function的标准实现存在根本性兼容障碍。其典型…...
3个革命性功能:163MusicLyrics让音乐歌词管理效率提升10倍
3个革命性功能:163MusicLyrics让音乐歌词管理效率提升10倍 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代,歌词管理已成为音乐爱好…...
F_Record:让Photoshop绘画过程录制变得简单高效的轻量级插件
F_Record:让Photoshop绘画过程录制变得简单高效的轻量级插件 【免费下载链接】F_Record 一款用来录制绘画过程的轻量级PS插件 项目地址: https://gitcode.com/gh_mirrors/fr/F_Record 在数字艺术创作领域,每一笔笔触都承载着创作者的灵感与思考。…...
非隔离双向 DC/DC 变换器 buck - boost 变换器仿真探索
非隔离双向DC/DC变换器 buck-boost变换器仿真 输入侧为直流电压源,输出侧接蓄电池 模型采用电压外环电流内环的双闭环控制方式 可实现恒流充放电,且具备充放电保护装置防止过充和过放。 蓄电池充放电模式可切换 Matlab/Simulink模型在电力电子领域&#…...
工单系统已经上线,但 IT 管理并没有真正变好
在很多企业中,引入 IT 工单系统往往被视为 IT 管理升级的重要一步。 有了统一入口、有了记录机制、有了流程流转,看起来一切都开始变得规范起来。但实际运行一段时间后,不少团队会发现: 工单确实在增加,流程也在走&…...
为什么你的BUCK电路动态响应慢?从Fm增益公式反推电感选型技巧
为什么你的BUCK电路动态响应慢?从Fm增益公式反推电感选型技巧 在电源设计领域,BUCK电路的动态响应速度常常成为工程师调试的痛点。当负载突变时输出电压的恢复时间过长,或者环路补偿怎么调都不理想,问题很可能出在最基础的电感参…...
基于RAG的智能客服系统实战:从架构设计到生产环境优化
最近在做一个智能客服系统的升级项目,之前用规则引擎维护起来太痛苦了,纯用大模型又贵又不准。经过一番折腾,最终用RAG(检索增强生成)技术搞定了,效果提升非常明显。今天就来分享一下从架构设计到上线优化的…...
告别繁琐配置:用快马一键生成wsl2环境初始化脚本
告别繁琐配置:用快马一键生成wsl2环境初始化脚本 最近在帮团队新成员配置开发环境时,发现每次手动搭建wsl2都要重复查找各种命令和配置步骤,效率实在太低。于是尝试用InsCode(快马)平台生成了一套自动化脚本,效果出乎意料地好。 …...
神经高利贷:预支未来技能导致认知崩溃
在软件测试领域,从业者常面临一个隐形威胁:过度追求新技能而忽视认知极限,最终引发崩溃。这种现象被称为“神经高利贷”,即通过预支未来学习能力来应对当前挑战,结果导致认知资源枯竭、错误率飙升,甚至职业…...

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