LeetCode-473

news/2024/11/28 9:28:34/

火柴拼正方形

你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍 拼成一个正方形。你 不能折断 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 使用一次 。如果你能使这个正方形,则返回 true ,否则返回 false 。

回溯,根据先决条件判断出变长,轮询,不满足则剪枝,减少判断次数

class Solution 
{
public:bool makesquare(vector<int>& matchsticks) {if (matchsticks.size() < 4) {return false; // 边数小于4}int nSum = accumulate(matchsticks.begin(), matchsticks.end(), 0);if (nSum % 4) {return false; // 和不是4的倍数}// 从大到小排序,优先选用大的边可以令不成功的情况更快返回sort(matchsticks.begin(), matchsticks.end(), greater<int>()); vector<int> bucket(4); // 定义4个边的值return dfs(0, matchsticks, nSum / 4, bucket);}//index为当前遍历下标,matchsticks为边长,target为目标边长,bucket表示当前每条边的长度bool dfs(int nIndex, const vector<int>& matchsticks,const int& target, vector<int>& bucket) {if (nIndex >= matchsticks.size()) // 每条边都用了{return (bucket[0] == bucket[1]) && (bucket[0] == target);}for (int i = 0; i < 4; i++) { // 将当前的边放在4个桶中分别尝试if (bucket[i] + matchsticks[nIndex] > target){// 说明不可以放在这个边上continue; }// 否则放入该边后继续dfsbucket[i] += matchsticks[nIndex]; if(dfs(nIndex + 1, matchsticks, target, bucket)){return true;}//删除边长bucket[i] -= matchsticks[nIndex]; }return false;}
};

http://www.ppmy.cn/news/535637.html

相关文章

leetcode 477. Total Hamming Distance | 477. 汉明距离总和

题目 https://leetcode.com/problems/total-hamming-distance/ 题解 class Solution {public int totalHammingDistance(int[] nums) {int N nums.length;int[] count new int[32];for (int n : nums) {for (int i 0; i < 32; i) {count[i] (n >> i) & 1;}…

477-82(236、61、47、74、240、93)

236. 二叉树的最近公共祖先 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root p || root q || root nullptr) return root;TreeNode* left lowestCommonAncestor(root->left, p, q);TreeNode* right l…

LeetCode 477 汉明距离总和

题目链接 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0c;2表示为0010。…

477. 汉明距离总和(中等,位运算)

題目&#xff1a; 分析1&#xff0c;统计每一位的1个数&#xff1a;T了。 class Solution:def totalHammingDistance(self, nums: List[int]) -> int:a len(nums) # 总个数if len(nums)0 :return 0a2 max(nums)c [0 for i in range(0,a2)]for i in nums:if i0:continues…

LeetCode笔记:477. Total Hamming Distance

问题&#xff1a; The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Now your job is to find the total Hamming distance between all pairs of the given numbers. Example: Input: 4, 14, 2 Output:…

LeetCode 47

这个题是对上一个题的变形&#xff0c;变化的条件是数组里面可以出现相同的元素&#xff0c;这样确实加大了难度。不过在上个题的基础上我们可以把精力主要放在怎么处理重复的数字。如果没有记错&#xff0c;我们之前的一道题也是类似情况&#xff0c;我看了一下是 LeetCode 40…

4.17 一

现有一网络拓扑图如上 要求&#xff1a;①AR1 GE000口用接口DHCP分配IP ②AR1001口用全局DHCP分配IP ③各PC间互通 思路&#xff1a; ①想给PC1、2分配IP需要进入充当DHCP服务器的AR1的000端口配置IP&#xff0c;启用DHCP协议&#xff0c;配置接口地址池并调用。无需配置IP和…

【LeetCode】477. Total Hamming Distance 解题报告(Python C++)

作者&#xff1a; 负雪明烛 id&#xff1a; fuxuemingzhu 个人博客&#xff1a; http://fuxuemingzhu.cn/ 目录 题目描述题目大意解题方法位运算 日期 题目地址&#xff1a;https://leetcode.com/problems/total-hamming-distance/description/ 题目描述 The Hamming distanc…