题目大意
https://leetcode.com/problems/matchsticks-to-square/
给你一个数组,无重复地选出4组数,每组数之和相等。
题目分析
自己写了个dfs解法,没有写对,参考了讨论区的dfs的一个优雅做法:https://discuss.leetcode.com/topic/72107/java-dfs-solution-with-explanation 用了四个数字保存四条边的累计和,每次拓展最多有四个方向。但是这样做可以AC,但是不够优化,注意可以先将数组倒序,这样从先往后搜索时先遇到大的数可以进行剪枝掉了,如果从小的开始,可能需要很久才能“凑够”一个边长。经过排序优化后程序运行时间有1000多降到40几。这个题目理论上可以动态规划解,但实际不好设计保存状态的数据结构。
代码
|
|
复杂度:O(4^15)