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

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。

不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到

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

示例 1:
输入: [1,1,2,2,2]
输出: true
解释: 能拼成一个边长为2的正方形,每边两根火柴。示例 2:
输入: [3,3,3,3,4]
输出: false解释: 不能用所有火柴拼成一个正方形。
注意:
给定的火柴长度和在 010^9之间。
火柴数组的长度不超过15

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/matchsticks-to-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 注意先从大到小排序,不排序会超时,优先拿大的,省掉很多无效的操作
class Solution {bool found = false;int s1_4;vector<int> parts;
public:bool makesquare(vector<int>& nums) {sort(nums.rbegin(), nums.rend());int sum = accumulate(nums.begin(), nums.end(), 0);s1_4 = sum/4;parts = vector<int> (4,0);if(sum%4 || nums.size() < 4 || nums[0] > s1_4) return false;if(nums[0] < s1_4 && nums[0]+nums.back() > s1_4)//都小于1/4,且最大+最小 > 1/4 return false;bt(nums, 0);return found;}void bt(vector<int>& nums, int idx){if(found) return;if(parts[0] > s1_4 || parts[1] > s1_4|| parts[2] > s1_4 || parts[3] > s1_4)return;if(idx==nums.size() && parts[0]==parts[1] && parts[0]==parts[2] && parts[0]==parts[3]){found = true;return;}for(int i = 0; i < 4; ++i){parts[i] += nums[idx];bt(nums, idx+1);parts[i] -= nums[idx];}}
};

204 ms 9.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web基础编程-图片管理网站

图片艺廊管理网站说明 数据库设计&#xff1a; 主要由三张表&#xff1a;用户表、图片表、用户图片对应关系表。 用户表&#xff1a; 主要字段如下&#xff1a; 用户ID 整型 主键 自增长&#xff1b; 用户姓名 字符型 &#xff1b; 用户密码 字符型 &…

HDOJ 1494 跑跑卡丁车

跑跑卡丁车Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1778 Accepted Submission(s): 583Problem Description跑跑卡丁车是时下一款流行的网络休闲游戏&#xff0c;你可以在这虚拟的世界里体验驾驶的乐趣。…

LeetCode 375. 猜数字大小 II(DP)

文章目录1. 题目2. 解题1. 题目 我们正在玩一个猜数游戏&#xff0c;游戏规则如下&#xff1a; 我从 1 到 n 之间选择一个数字&#xff0c;你来猜我选了哪个数字。 每次你猜错了&#xff0c;我都会告诉你&#xff0c;我选的数字比你的大了或者小了。 然而&#xff0c;当你猜…

网络命令使用

实验目的 1&#xff0e;掌握基本的网络命令&#xff0c;并了解其在网络领域的作用。 2&#xff0e;学习使用网络命令&#xff0c;并了解其参数的含义。 实验要求 1&#xff0e;要求不仅能会使用网络命令&#xff0c;并能在实际网络操作中灵活运用。 2&#xff0e;能将基本…

python中的range与list函数

使用python的人都知道range()函数很方便&#xff0c;今天再用到他的时候发现了很多以前看到过但是忘记的细节。 这里记录一下range(),复习下list的slide&#xff0c;最后分析一个好玩儿的冒泡程序。 这里记录一下&#xff1a; >>> range(1,5) #代表从1到5(不包含5)[1,…

LeetCode 546. 移除盒子(DP)*

文章目录1. 题目2. 解题1. 题目 给出一些不同颜色的盒子&#xff0c;盒子的颜色由数字表示&#xff0c;即不同的数字表示不同的颜色。 你将经过若干轮操作去去掉盒子&#xff0c;直到所有的盒子都去掉为止。 每一轮你可以移除具有相同颜色的连续 k 个盒子&#xff08;k > …

转 php 观察者模式

<?php /** * 观察者模式 *//** * 抽象主题角色 */ interface Subject {/** * 增加一个新的观察者对象 * param Observer $observer */ public function attach(Observer $observer);/** * 删除一个已注册过的观察者对象 * param Observer $observer */ public function det…

配置VLAN以及配置VTP;

实验目的 配置VLAN; 通过VLAN Trunk配置跨交换机的VLAN; 配置VTP; 查看上述配置项目的有关信息。 设备需求 本实验需要以下设备&#xff1a; Cisco Catalyst 2950系列交换机2台&#xff0c;型号不限; 交叉线序网线1条; 1台带有超级终端程序的PC机&#xff0c;以及Cons…

python中的随机函数random

一、random模块简介 Python标准库中的random函数&#xff0c;可以生成随机浮点数、整数、字符串&#xff0c;甚至帮助你随机选择列表序列中的一个元素&#xff0c;打乱一组数据等。 二、random模块重要函数 1 )、random() 返回0<n<1之间的随机实数n&#xff1b; …

LeetCode 1140. 石子游戏 II(DP)*

文章目录1. 题目2. 解题1. 题目 亚历克斯和李继续他们的石子游戏。许多堆石子 排成一行&#xff0c;每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。 亚历克斯和李轮流进行&#xff0c;亚历克斯先开始。最初&#xff0c;M 1。 在每个玩家的回合中&…

在Ubuntu上下载、编译和安装Android 4.2 最新内核源代码(Linux Kernel)

根据http://blog.csdn.net/luoshengyang/article/details/6564592博客内容对android4.2的编译 从源代码树下载下来的最新Android源代码&#xff0c;是不包括内核代码的&#xff0c;也就是Android源代码工程默认不包含Linux Kernel代码&#xff0c;而是使用预先编译好的内核&…

Python中的Number(数字)

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值&#xff0c;将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建&#xff1a; var1 1 var2 10 您也可以使用del语句删除一些 Number 对象引用。 del语句的…

LeetCode 1550. 存在连续三个奇数的数组

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr&#xff0c;请你判断数组中是否存在连续三个元素都是奇数的情况&#xff1a;如果存在&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;arr [2,6,4,1] 输出&…

配置RIP实验

实验目的 掌握RIPv1和v2配置方法 掌握show ip rip database、sh ip protocol命令 掌握debug命令 掌握将RIP的广播更新方式更改为单播方式 设备需求 本实验需要以下设备&#xff1a; 4台2811Cisco路由器&#xff0c;四台都有两个FastEthernet口。 2条双绞线&#xff0c;…

LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

文章目录1. 题目2. 解题1. 题目 存在一个长度为 n 的数组 arr &#xff0c;其中 arr[i] (2 * i) 1 &#xff08; 0 < i < n &#xff09;。 一次操作中&#xff0c;你可以选出两个下标&#xff0c;记作 x 和 y &#xff08; 0 < x, y < n &#xff09;并使 arr…

协议数据分析

实验目的 了解协议分析仪的使用方法和基本特点。 增强对网络协议的理解。 实验要求 要求在进行协议数据分析后&#xff0c;能够将网络数据与具体的网络操作相互映证&#xff0c;如实的记录实验结果&#xff0c;完成实验 实验环境 1&#xff0e;一台运行Windows 2000的计算机…

python中的面向对象

Python 面向对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。现在介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本特…

会计基础第二次模拟试题(1)

会计基础第二次模拟试题(1) 会计基础第二次模拟试题(1) 之前我们整理了一部分会计基础的模拟题&#xff0c;下面是之前的文章列表&#xff0c;请大家多提建议&#xff1a; 会计基础第一次模拟题会计基础一 会计基础模拟练习2 会计基础模拟试题三 会计基础4 会计基础5 会计基础6…

LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 在代号为 C-137 的地球上&#xff0c;Rick 发现如果他将两个球放在他新发明的篮子里&#xff0c;它们之间会形成特殊形式的磁力。 Rick 有 n 个空的篮子&#xff0c;第 i 个篮子的位置在 position[i] &#xff0c;Morty 想把 m 个球放到这些篮子…

无连接网络通信程序UDP

服务器端 #include <windows.h> #include <iostream.h> #include <winsock.h> #pragma comment(lib,"ws2_32")#define NO_FLAGS_SET 0#define PORT (u_short) 44965 #define MAXBUFLEN 256INT main(VOID) {WSADATA Data;//它存储 被WSAStartup函数…