题目链接

473. 火柴拼正方形

题意

给定一串数,判断这串数字能不能拼接成为正方形

思路

DFS,但是不能每次从从序列开始往下搜索,因为这样无法做到四个边覆盖不同位置的值,比如输入是(5,5,5,5,4,4,4,4,3,3,3,3)这种情况

以四条边分类讨论,每次加入序列的值,最后判断四条边的结果是否相等

其次注意剪枝:

  • 首先将序列逆序排列,尤其遇到(1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4....),如果正着搜索那么一定会超时
  • 每一轮检查每条边加上序列的值,得到的结果如果大于边长,那么直接剪枝
class Solution {
public:
int avr=-1;
bool dfs(vector<int> nums,int pos,int cnt[4]){
if(pos==-1){
return cnt[0]==cnt[1] && cnt[1]==cnt[2] && cnt[2]==cnt[3] && cnt[3]==avr;
} //对每一个段的值进行统计
for(int i=0;i<4;i++){//对每一段分别统计
if(cnt[i]+nums[pos]>avr) continue;//剪枝 cnt[i]+=nums[pos];
if(dfs(nums,pos-1,cnt)) return true; cnt[i]-=nums[pos];
} return false;
}
bool makesquare(vector<int>& nums) {
int sum=0;
for(int num:nums) sum+=num;
if(sum%4!=0) return false;
if(!nums.size()) return false;//特判一下[] avr=sum/4;
sum=0;
//排序一下,减少调用次数,从大到小调用,类似于剪枝
sort(nums.begin(),nums.end());
int cnt[4]={0}; return dfs(nums,nums.size()-1,cnt); } // bool dfs(vector<int> nums,int sum,int pos,int cnt){ //记录四条边的长度
// if(sum>avr) return false;
// if(sum==avr) {
// cnt++;
// sum=0;
// }
// if(pos==nums.size()){
// if(cnt==4) return true;
// else return false;
// }
// for(int i=pos;i<nums.size();i++){
// sum+=nums[i];
// if(dfs(nums,sum,i+1,cnt)) return true;//只能判断连续的值
// sum-=nums[i];
// } // return false;
// }
// bool dfs(vector<int> nums,vector<int> tmp,int pos){
// if(tmp.size() && tmp[tmp.size()-1]>avr) return false;
// if(tmp.size()>4) return false;
// if(tmp.size()==4){
// if(tmp[0]==tmp[1] && tmp[1]==tmp[2] && tmp[2]==tmp[3] &&tmp[0]==avr) return true;
// return false;
// } // for(int i=pos;i<nums.size();i++){//顺序不是连在一起的
// tmp.push_back()
// } // return false;
// }
// bool dfs(vector<int> nums,int pos,vector<int> cnt(4,0)){//每一部分的和
};

leetcode 473. 火柴拼正方形(DFS,回溯)的更多相关文章

  1. Java实现 LeetCode 473 火柴拼正方形

    473. 火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到 ...

  2. Leetcode 473.火柴拼正方形

    火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到. 输入为 ...

  3. Leetcode之深度优先搜索(DFS)专题-473. 火柴拼正方形(Matchsticks to Square)

    Leetcode之深度优先搜索(DFS)专题-473. 火柴拼正方形(Matchsticks to Square) 深度优先搜索的解题详细介绍,点击 还记得童话<卖火柴的小女孩>吗?现在, ...

  4. 473 Matchsticks to Square 火柴拼正方形

    还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到.输入为小女孩拥有火柴的 ...

  5. [Swift]LeetCode473. 火柴拼正方形 | Matchsticks to Square

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  6. LeetCode刷题 DFS+回溯

    一.DFS介绍 二.LeetCode 实战 LC 17. 电话号码的字母组合 解法思路 解题步骤 代码 LC 79. 单词搜索 解题思路 解题步骤 代码 LC 46. 全排列 解题思路一 解题步骤 代 ...

  7. [LeetCode] 79. 单词搜索(DFS,回溯)

    题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格 ...

  8. [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)

    39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ...

  9. 【POJ - 3009】Curling 2.0 (dfs+回溯)

    -->Curling 2.0 直接上中文 Descriptions: 今年的奥运会之后,在行星mm-21上冰壶越来越受欢迎.但是规则和我们的有点不同.这个游戏是在一个冰游戏板上玩的,上面有一个正 ...

随机推荐

  1. js下 Day20、综合案例

    一.购物车 效果图: 功能思路分析: 1. 面向对象框架 2. 模拟数据 1.多个店铺数组套对象 2.每个店铺多个商品,数组套对象

  2. vue第五单元(v-if和v-show以及v-for的灵活应用 watch以及computed的区别 (常见效果) #课程目标

    第五单元(v-if和v-show以及v-for的灵活应用 watch以及computed的区别 (常见效果) #课程目标 精通 v-if v-else v-else-if 的使用 精通 v-show  ...

  3. [日常摸鱼]Uva11178Morley's Theorem-几何

    题意:给一个$\Delta ABC$,分别做三个角的三等分线相交成$\Delta DEF$,求出$D,E,F$的坐标. 直接根据题意模拟 #include<cstdio> #include ...

  4. 群晖DS218+部署GitLab

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. s2-061 漏洞复现

    0x00 漏洞简介 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架.Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执 ...

  6. 【python爬虫】一个简单的爬取百家号文章的小爬虫

    需求 用"老龄智能"在百度百家号中搜索文章,爬取文章内容和相关信息. 观察网页 红色框框的地方可以选择资讯来源,我这里选择的是百家号,因为百家号聚合了来自多个平台的新闻报道.首先看 ...

  7. 在python中元组与列表的区别及序列解包

    一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...

  8. Python常用内置对象

    1.在python中处理的一切都是对象. 2.内置对象可直接使用,如数字.字符串.列表.del等. 3.非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random()等.

  9. android 使用 Lottie

    1.添加依赖 dependencies { implementation 'com.airbnb.android:lottie:2.5.5'//lottie } 2.1layout实现 <?xm ...

  10. Weblogic命令执行漏洞(CVE-2018-2628)复现

    一.漏洞环境搭建 CVE-2018-2628影响的软件版本为: Weblogic 10.3.6.0 Weblogic 12.1.3.0 Weblogic 12.2.1.2 Weblogic 12.2. ...