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

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 游戏

http://www.lryc.cn/news/128981.html

相关文章:

  • git-fatal: No url found for submodule path ‘packages/libary‘ in .gitmodules
  • Android开发之性能优化:过渡绘制解决方案
  • Wireshark 抓包过滤命令汇总
  • 配资平台app(正规股票配资软件)架构是怎么搭建的?
  • 【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg
  • 神经网络基础-神经网络补充概念-57-多任务学习
  • CMake教程6:调用lib、dll
  • 行业资讯丨“燃气智慧化”到底是什么?
  • angular注入方法providers
  • Git提交规范指南
  • QT之UDP通信
  • 一、进入sql环境,以及sql的查询、新建、删除、使用
  • 向日葵如何截图
  • 固定资产折旧报表
  • ubuntu18 下更改 mysql 数据目录
  • Arduino看门狗定时器WDT
  • 大数据岗位秋招面试八股文总结(不定时更新)
  • MATLAB高分辨率图片
  • Spring Clould 消息队列 - RabbitMQ
  • 【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口
  • 微信小程序前后端开发快速入门(完结篇)
  • 【Linux】进程间通信之消息队列
  • 一次Linux中的木马病毒解决经历(6379端口---newinit.sh)
  • ProtoBuf
  • AJ-Captcha行为验证在vue中的使用
  • Layui列表复选框根据条件禁用
  • K8S核心组件etcd详解(下)
  • 【HarmonyOS】【DevEco Studio】ohpm安装失败该如何解决?
  • STM32 cubemx CAN
  • 贴片电阻封装尺寸及焊盘尺寸