题目:
还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。
输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。
解析:
我们首先思考:
我们还可以进行优化
代码:
class Solution {
public boolean makesquare(int[] nums) {
if(nums.length<4){
return false;
}
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
if(sum%4!=0){
return false;
}
Arrays.sort(nums);
int[] bucket=new int[4];
for(int i=0;i<bucket.length;i++){
bucket[i]=0;
}
boolean b=gengerate(nums.length-1,nums,sum/4,bucket);
return b;
}
public boolean gengerate(int i,int[] nums,int target,int[] bucket){
if(i==-1){
return bucket[0]==target && bucket[1]==target && bucket[2]==target && bucket[3]==target;
}
for(int j=0;j<4;j++){
if(bucket[j]+nums[i]>target){
continue;
}
bucket[j]+=nums[i];
if(gengerate(i-1,nums,target,bucket)){
return true;
}
bucket[j]-=nums[i];
}
return false;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/matchsticks-to-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。