题目详情见官网
为什么又把它捞出来了呢?因为 广联达开发的暑期实习笔试 今天考了这个原题,只是背景不同,让我们温故而知新吧。
思维导图攻破算法难题
算法思路视频讲解请点击——> b站鲁班代师讲解视频
视频中附有C++源码,本博客提供Java代码,算法思路完全一致。

更多精彩视频(Letecode笔试高频题、互联网大厂笔试刷题)请在bilibili搜索鲁班代师,然后搜索题号就可以,关注不走丢,感谢。
欢迎批评指正、探讨!

import java.util.Arrays;
import java.util.Scanner;class Solution
{//判断是否可以构成正方行public boolean makesquare(int[] nums){//简单判断条件if(nums.length < 4){//数组长度小于4return false;}int sum = 0;for(int i = 0; i < nums.length; i++){sum += nums[i];}if(sum % 4 != 0){//数组数值总和不能被4整除return false;}// 将数组降序排列(c++比较容易实现,java需要自己重写Comparator的compare方法),后面附上了重写的具体方法,此处暂用升序,回头从最后一个元素开始调用Arrays.sort(nums);int edge[] = new int[]{0, 0, 0, 0};//四个边的初始数组return generate(nums.length-1, nums,sum/4, edge);}//迭代函数,递归回溯的放置每个钢筋,第i次递归,即把arr[i]放到合适的边上public boolean generate(int i, int[] arr, int target, int[] edge){//终止条件if(i < 0){return edge[0] == target && edge[1] == target && edge[2] == target && edge[3] == target;}for(int j = 0; j < 4; j++){if(edge[j] + arr[i] > target){//尝试吧arr[i]这个钢筋放到下一个边上,跳过本次循环continue;}edge[j] += arr[i];//继续迭代,判断经过当前放置之后,是否全放完了if(generate(i-1, arr, target, edge)){//全放完了,且满足条件return true;}//回溯,刚才放的,再取出来,从新将arr[i]放置到新的边,直到4个边都尝试结束edge[j] -= arr[i];}//都尝试过了,还没有return,说明无法拼成return false;}
}

Java实现自带sort的数组降序排列代码

public class Main
{public static void main(String[] args){ //读入arr数组,此处省略decreaseCompare cmp = new decreaseCompare();Arrays.sort(arr, cmp);}
}
class decreaseCompare implements Comparator<Integer>
{@Overridepublic int compare(Integer a, Integer b){return a > b ? -1 : 1;}
}

【Leetcode473】火柴拼正方形(递归与回溯)相关推荐

  1. LeetCode473. 火柴拼正方形

    目录 文章目录 一.题目 二.解题思路 三.知识总结 1.C++ sort()排序函数用法详解 2.accumulate()函数 总结 一.题目 你将得到一个整数数组 matchsticks ,其中 ...

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

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

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

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

  4. LeetCode 473. 火柴拼正方形

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

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

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

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

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

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

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

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

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

  9. 473. 火柴拼正方形

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

最新文章

  1. 【收藏】推荐系列:2008年第08期 总10期
  2. Saltstack Master 配置文件详解
  3. java阻塞超时_JAVA防线程阻塞(超时控制)
  4. TCP/IP 协议简单分析(建立连接握手过程)
  5. 热榜!!!数据结构与算法:C语言版---数组与稀疏矩阵---强势来袭!
  6. 前端学习(2964):路由的实现
  7. HDU3709 Balanced Number
  8. Parallels Desktop 17 亮点整理,7 大改进与变化
  9. mysql临时开启二进制_mysql二进制安装 - yunwei-LS的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 【幅频均衡带通滤波器】基于FPGA的幅频均衡带通滤波器的设计
  11. eclipse adt离线安装
  12. 秩和比综合评价法(RSR)详解及Python实现和应用
  13. windows访问Linux共享文件夹
  14. python语音聊天_语音聊天实现
  15. 米聊之死 雷军的“猪”折了腿?
  16. 图像分割之基于阙值的分割方法
  17. C语言指针学习与使用
  18. MATLAB 冒泡算法
  19. 计算机内存采用什么存储模式,计算机内存模型
  20. 零知识证明:重要构造

热门文章

  1. oracle竖着显示数据,2020 Oracle、mysql经典例题一(如何把表格数据竖着排列)
  2. 使用USB摄像头(Webcam)拍照
  3. linux生成表格文件大小,在Linux下制作工资表(转)
  4. 基于MATLAB的指纹指纹识别系统
  5. 【Python随手笔记】pip国内源安装及Jupyter修改默认工作路径
  6. Python关于strftime函数详细解析 附实战代码
  7. Python (12) strftime( )函数
  8. nginx 部署flask应用
  9. 论文翻译:2020_DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement...
  10. Unity 知识总结