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
时间: 2024-10-18 07:55:01