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