LeetCode解析------473. 火柴拼正方形-位运算
作者:互联网
473. 火柴拼正方形
还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。
输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。
示例 1:
输入: [1,1,2,2,2]
输出: true
解释: 能拼成一个边长为2的正方形,每边两根火柴。
示例 2:
输入: [3,3,3,3,4]
输出: false
解释: 不能用所有火柴拼成一个正方形。
注意:
给定的火柴长度和在 0 到 10^9之间。
火柴数组的长度不超过15。
伪代码
输入:由火柴长度组成的数组nums
输出:能否拼成正方形(true或false)
1.如果火柴数目小于4,则返回false
2.如果火柴长度之和sum不能被4整除,则返回false
3.求出target=sum/4
4.设置火柴所有位运算可能数目all=1<<nums.length,设置所有符合情况一条边组成的动态数组one,设置所有符合情况两条边组成的动态数组two
5.使用i循环all
5.1设置count统计i对应所有位元素的和
5.2使用j循环nums.length的所有位
5.2.1(i&(1<<j)!=0)则说明i有取到该位元素,count+=nums[j]
5.3如果count==target,则push元素i到one动态数组
6.使用i循环one数组,直到结尾
6.1使用j=i+1循环one数组,直到结尾
6.1.1如果one[i]&one[j]=0(无重复元素),则可以push(one[i] | one[j])到two
7.使用i循环two数组,直到结尾
7.1使用j=i+1循环two数组,直到结尾
7.1.1如果two[i]&two[j]=0(无重复元素),则返回true
8.如果上述情况都不满足,则返回false
代码
import java.util.ArrayList;
import java.util.List;
public class Solution {
public boolean makesquare(int[] nums) {
//如果火柴数目小于4,则返回false
if(nums.length<4){
return false;
}
//如果火柴长度之和sum不能被4整除,则返回false
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
if(sum%4!=0){
return false;
}
//主要算法
int target=sum/4;
int all=1<<nums.length;//相当于2的nums.length次方
List<Integer> one=new ArrayList<>();
List<Integer> two=new ArrayList<>();
for(int i=0;i<all;i++){
int count=0;
for(int j=0;j<nums.length;j++){
//(i&(1<<j)!=0)与运算,不为零,说明有相同的位,则i有取到该位元素
if((i&(1<<j))!=0){
count+=nums[j];
}
}
if(count==target){
one.add(i);
}
}
/**
*
* 6.使用i循环one数组,直到结尾
* 6.1使用j=i+1循环one数组,直到结尾
* 6.1.1如果one[i]&one[j]=0(无重复元素),则可以push(one[i] | one[j])到two
*
*/
for(int i=0;i<one.size();i++){
for(int j=i+1;j<one.size();j++){
if((one.get(i)&one.get(j))==0){
two.add(one.get(i)|one.get(j));
}
}
}
/**
*
* 7.使用i循环two数组,直到结尾
* 7.1使用j=i+1循环two数组,直到结尾
* 7.1.1如果two[i]&two[j]=0(无重复元素),则返回true
*/
for(int i=0;i<two.size();i++){
for(int j=i+1;j<two.size();j++){
if((two.get(i)&two.get(j))==0){
return true;
}
}
}
return false;
}
}
结果
标签:false,结尾,int,two,473,数组,火柴,------,LeetCode 来源: https://blog.csdn.net/weixin_44337475/article/details/113530537