473. 火柴拼正方形
Posted yuhong1103
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了473. 火柴拼正方形相关的知识,希望对你有一定的参考价值。
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 };
以上是关于473. 火柴拼正方形的主要内容,如果未能解决你的问题,请参考以下文章