此题为给一个集合,求所有子集中的某一个子集,这个子集满足条件:
1,此集合的和为一个level2幸运数字,该数字要么全是7,要么全是4
2,该集合为满足条件中所有数组中和最大的一个
3,如果有多个这样的数组,返回字典序最小的那个。
其中比较重要的算法就是求一个集合的所有子集:
如下:
int [] numbers ={};
ArrayList al = new ArrayList();
Arrays.sort(numbers);
int t=1<<numbers.length;
int i;
for(i=0;i<t;i++)
{
ArrayList a = new ArrayList();
int j=i;
int k=0;
while(j>0)
{
if((j&1)>0) //与运算判断j第k位是否为1,来决定第k个元素在不在地i个子集中
{
a.add(numbers[k]);
}
k++;
j=j>>1; //右移一位来继续判断
}
al.add(a);
}
该题解为:
还有一些漏洞:最后一个用例过不了,字典序还有一些问题。
import java.util.*;
public class TheLuckyNumbersLevelTwo
{
public static boolean confirm(long numbers)
{
String s =String.valueOf(numbers);
if (s.charAt(0)==‘4‘)
{
for(int x=0;x<s.length();x++)
{
if(s.charAt(x)==‘4‘)
;
else
return false;
if(x==s.length()-1)
return true;
}
}
if(s.charAt(0)==‘7‘)
{
for(int x=0;x<s.length();x++)
{
if(s.charAt(x)==‘7‘)
;
else
return false;
if(x==s.length()-1)
return true;
}
}
return false;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static int [] find(int [] numbers)
{
ArrayList al = new ArrayList();
Arrays.sort(numbers);
int t=1<<numbers.length;
int i;
for(i=0;i<t;i++)
{
//System.out.println(i);
ArrayList a = new ArrayList();
int j=i;
int k=0;
while(j>0)
{
if((j&1)>0)
{
a.add(numbers[k]);
}
k++;
j=j>>1;
}
al.add(a);
}
int sum[]= new int [al.size()];
for(i=0;i<al.size();i++)
{
sum[i]=0;
ArrayList p= (ArrayList)al.get(i);
for(int j=0;j<p.size();j++)
{
sum[i]+=(int)p.get(j);
}
}
for(i=0;i<sum.length;i++)
{
int min = sum[i];
ArrayList minlist=(ArrayList) al.get(i);
for(int j=i+1;j<sum.length;j++)
{
if(min>sum[j])
{
int k=min;
min=sum[j];
sum[j]=k;
ArrayList w=minlist;
minlist=(ArrayList)al.get(j);
al.set(j, w);
}
}
sum[i]=min;
al.set(i, minlist);
}
for(i=sum.length-1;i>=0;i--)
{
if(confirm(sum[i]))
{
ArrayList p=(ArrayList)al.get(i);
ArrayList p1=(ArrayList)al.get(i-1);
if(i>=1)
if(sum[i]==sum[i-1])
{
if((int)p.get(0)>(int)p1.get(0))
{
p=p1;
}
}
int array[]=new int[p.size()];
for(int x=0;x<p.size();x++)
array[x]=(int) p.get(x);
return array;
}
}
int a[]={};
return a;
}
public static void main(String[] args)
{
int x [] ={1, 2, 3, 4};
int a[];
a=find(x);
for(int y=0;y<a.length;y++)
System.out.println(a[y]);
}
}