473. 火柴拼正方形

 1 class Solution
 2 {
 3 public:
 4     bool makesquare(vector<int>& nums)
 5     {
 6         if(nums.size()<4) return false;
 7         int sum=0;
 8         for(int i=0;i<nums.size();i++) sum+=nums[i];
 9         if(sum%4 != 0) return false;
10         sort(nums.rbegin(),nums.rend());//最神奇的一个操作(rebgin,rend)反向迭代器
11         //排序的原因是为了使大的数字优先放 会减少排序次数
12         int bucket[4]={0};
13         return generate(0,sum/4,nums,bucket);
14     }
15     bool generate(int i,int target,vector<int>& nums,int bucket[])
16     {
17         if(i == nums.size()) return bucket[0] == target && bucket[1] == target && bucket[2] == target && bucket[3] == target;
18
19         for(int j = 0;j < 4;j ++)
20         {
21             //如果某个边长大于target就不放了
22             if(bucket[j] + nums[i] > target) continue;
23
24             bucket[j] += nums[i];
25             if(generate(i + 1,target,nums,bucket)) return true;
26             bucket[j] -= nums[i];
27         }
28         return false;
29     }
30 };

原文地址:https://www.cnblogs.com/yuhong1103/p/12629004.html

时间: 2024-07-31 14:58:50

473. 火柴拼正方形的相关文章

Leetcode 473.火柴拼正方形

火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到. 输入为小女孩拥有火柴的数目,每根火柴用其长度表示.输出即为是否能用所有的火柴拼成正方形. 示例 1: 输入: [1,1,2,2,2] 输出: true 解释: 能拼成一个边长为2的正方形,每边两根火柴. 示例 2: 输入: [3,3,3,3,4] 输出: false 解释: 不能用所有火柴拼成一个正方形. 注意:

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

Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match girl has, please find out a way you can make one square by using up all those matchsticks. You should not break any stick, but you can link them up, a

leetcode 火柴拼正方形 深搜

还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到. 输入为小女孩拥有火柴的数目,每根火柴用其长度表示.输出即为是否能用所有的火柴拼成正方形. 示例?1: 输入: [1,1,2,2,2] 输出: true 解释: 能拼成一个边长为2的正方形,每边两根火柴. 示例?2: 输入: [3,3,3,3,4] 输出: false 解释: 不能用所有火柴拼成一个正方形. 来源:力扣(LeetC

Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)

700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二叉搜索树的特点为左比根小,右比根大.那么目标结点就有三种可能: 1. 和根一样大,那么直接返回根即可. 2. 比根的值小,那么应该再去次左子树中搜索. 3. 比根的值大,那么应该再次去右子树中搜索. 可以看到这就是一个递归的思路. class Solution: def searchBST(self

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

[Swust OJ 179]--火柴棍(找规律)

题目链接:http://acm.swust.edu.cn/problem/0179/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 火柴棍可以拼成10进制的数字,如图所示: 现在,gogo给你个n个火柴棍,要求你输出最小能拼成的数字和最大能拼成的数字. Input 第一行输入一个整数T:T组测试数据(T<100) 每行输入一个n (2 ≤ n ≤ 100): 表示你有的火柴棍数. Output 最小能拼成的数字和最大能拼成的数字

Interview How to Count Squares

火柴拼出多少个正方形 http://matchstickpuzzles.blogspot.com/2011/06/55-4x4-square-how-many-squares.html 输入是两个二维数组ver 和 hor, 若是有火柴就是1, 没有就是0. dpHor 表示横方向上有多少连续火柴,dpVer表示纵方向上有多少连续火柴. 最后以左上角第一根横着的火柴为根基检查是否能组成正方形. Time Complexity: O(n^3). Space: O(n^2). 1 import ja

UVa1603 - Square Destroyer

题意: 给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有. 思路: 1. 由于题目中给定了 n 的范围,2 * n * (n + 1) <= 60 -> 所以能够保证所有的火柴用 __int64 的位运算表示; 2. 问题的关键在于如何生成火柴构成的方阵,以及生成方阵之后如何去搜索; 3. 启发式函数 h 的计算需要考量:如果删除了某个方阵的一个边,则能够保证 h(s1) <= h(s2) + C(s1, s2),其中 C(s1, s2)

智力趣题几则

古时一位农民被人诬陷,农民据理力争,县官因已经接受别人的贿赂,不肯放人,又找不到理由,就出了个坏主意.叫人拿来十张纸条,对农民说:“这里有十张纸条,其中有九张写的‘死’, 一张写的‘生’,你摸一张,如果是‘生’,立即放你回去,如果是‘死’,就怪你命不好,怨不得别人.”聪明的农民早已猜到纸条上写的都是“死”,无论抓哪一张都一样.于是他想了个巧妙的办法,结果死里逃生了.你知道他想的什么办法吗? 把其中的一张纸条吃下去,再根据排除法,结果就有九张死那么它吃下去的就是“生” 称苹果         有十