473. 火柴拼正方形

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

输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。

示例 1:

输入: [1,1,2,2,2]
输出: true

解释: 能拼成一个边长为2的正方形,每边两根火柴。

思路:刚开始想用贪心,把最长的放在最小的那边。后来发现错误

       22  2  32  3  5  310 6  5  5
sum 12 13 12 11

其实13跟11那两边可以平的,所以贪心的思路是错误的,面试的时候想错了。

正确思路

dfs搜索剪枝,N的四次方,怪不得火柴数组的长度不超过15。

class Solution {
public:int sum[4];bool makesquare(vector<int>& nums) {int size = nums.size();if(size==0) return false;fill(sum, sum+4, 0);long long nums_sum=0;for(int i=0;i<size;i++) nums_sum += nums[i];if(nums_sum%4 != 0) return false; //加起来不能被4整除long long possible = nums_sum/4;sort(nums.begin(), nums.end());return dfs(size-1, possible, size, nums);}
private:bool dfs(int index, const long long & possible, const int & size, vector<int>& nums){if(index==-1){if(sum[0]==possible && sum[1]==possible &&sum[2]==possible &&sum[3]==possible)                  return true;return false;}for(int i=0;i<4;i++){if((sum[i]+nums[index])>possible) continue;//剪枝,continue不能用return false代替sum[i] += nums[index];if(dfs(index-1, possible, size, nums)) return true;sum[i] -= nums[index];}return false;}
};

LeetCode 473. 火柴拼正方形相关推荐

  1. LeetCode 473. 火柴拼正方形(回溯)

    文章目录 1. 题目 2. 解题 1. 题目 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法. 不能折断火柴,可以把火柴连接起 ...

  2. 【Leetcode刷题Python】473. 火柴拼正方形

    1 题目 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度.你要用 所有的火柴棍 拼成一个正方形.你 不能折断 任何一根火柴棒,但你可以把它 ...

  3. 【473. 火柴拼正方形】

    来源:力扣(LeetCode) 描述 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度.你要用 所有的火柴棍 拼成一个正方形.你 不能折断 ...

  4. 473. 火柴拼正方形

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

  5. leetcode 473. Matchsticks to Square | 473. 火柴拼正方形(递归)

    题目 https://leetcode.com/problems/matchsticks-to-square/ 题解 看了 hint 之后,才有思路. 讨论区有个人说得好: This solution ...

  6. 贪心算法 | 473火柴拼正方形 怎么用C++实现摆放火柴棍?

    题目 已知一个数组,保存了n个(n<=15)火柴棍,问可否使用这n个火柴棍摆成一个正方形? 例如:[1,1,2,2,2] --true  2 求解 思路 num[i] :第i条火柴棍 bucke ...

  7. 经典回溯之火柴拼正方形

    473. 火柴拼正方形 给定很多小短火柴,拼成一个正方形 用到的技巧 1.  排序,传参数,起到剪枝的效果,排序后前面搜索过的在下层时直接跳过,具体体现为 for (int i = idx;i< ...

  8. 算法----火柴拼正方形

    题目 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度.你要用 所有的火柴棍 拼成一个正方形.你 不能折断 任何一根火柴棒,但你可以把它们连 ...

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

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. asp.net图片浏览器效果
  2. Linux_Shell_ Map 的使用和遍历
  3. 《抓住听众心理——演讲者要知道的100件事》一20.人们学习的最优长度是20分钟...
  4. python输入hello输出olleh_leetcode上的python练习(6)
  5. 错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009)
  6. jmeter测试TCP服务器/模拟发送TCP请求
  7. 通过8个技巧让你成为一个超强的Linux终端用户
  8. 字符串匹配算法(AC自动机 Aho-Corasick)
  9. 企业域名更换操作系列4:下载旧域域信息配置
  10. 输入框值不能赋值成功
  11. 从Demo到Engine(二) -- Render Queue Sort
  12. 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
  13. CSS盒模型(Box Model)
  14. 【项目管理/PMP/第六版/新考纲】纯干货!项目发展史/项目定义/项目集/项目组合/十五至尊图
  15. 微信小程序弹出框详解
  16. delphi跨平台linux的版本,Delphi 2011 发布了 跨 MAC,LINUX,WINDOWS 平台
  17. java版本PID放大/eTerm放大软件介绍
  18. 苹果系统中国日历服务器,ios日历中国节日不见了(2021年苹果日历订阅地址)...
  19. python按钮事件,Python按钮的响应事件详解
  20. mongodb被锁定 --repair

热门文章

  1. ES8新特性_ES8中对象方法的扩展---JavaScript_ECMAScript_ES6-ES11新特性工作笔记052
  2. 大数据_MapperReduce_与hive的集成_使用hive数据分析工具_关联操作hbase---Hbase工作笔记0025
  3. k8s核心技术-配置管理_Secret_以变量形式使用Secret文件_以及以数据卷的形式使用Secret文件---K8S_Google工作笔记0036
  4. Netty工作笔记0055---Unpooled应用实例1
  5. Netty工作笔记0004---BIO简介,介绍说明
  6. crfpp python
  7. composer安装扩展包异常
  8. Spring Tool Suite 错误: Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds.
  9. oracle怎么分配表空间,oracle数据库分配表空间、创造用户、分配用户权限操作
  10. python打印字符串的前五行_python基础-字符串(6)