算是实现了,但是效率什么的确实不敢恭维,待优化啊
Java代码
public static void main(String [] args) throws Exception
{
int a=20;
List temp;
for(int i=1;i<a;i++)
{
temp=new ArrayList();
temp.add(i);
list.add(temp);
cal(a-i,temp);
}
//输出结果
for(int i=0;i<list.size();i++)
{
for(int j=0;j<list.get(i).size();j++)
{
System.out.print(list.get(i).get(j));
if(j!=list.get(i).size()-1)
System.out.print("+");
}
System.out.println("="+a);
}
}
static List<List> list=new ArrayList<List>();
public static void cal(int x,List<Integer> l)
{
if(x==0)return;
else if(x<0){list.remove(l);return;}
for(int i=l.get(l.size()-1);i<=x;i++)
{
if(l.contains(i))
continue;
List des1=new ArrayList(Arrays.asList(new Object[l.size()]));//
Collections.copy(des1,l);
list.add(des1);
des1.add(i);
cal(x-i, des1);
}
list.remove(l);
}
public static void main(String [] args) throws Exception
{
int a=20;
List temp;
for(int i=1;i<a;i++)
{
temp=new ArrayList();
temp.add(i);
list.add(temp);
cal(a-i,temp);
}
//输出结果
for(int i=0;i<list.size();i++)
{
for(int j=0;j<list.get(i).size();j++)
{
System.out.print(list.get(i).get(j));
if(j!=list.get(i).size()-1)
System.out.print("+");
}
System.out.println("="+a);
}
}
static List<List> list=new ArrayList<List>();
public static void cal(int x,List<Integer> l)
{
if(x==0)return;
else if(x<0){list.remove(l);return;}
for(int i=l.get(l.size()-1);i<=x;i++)
{
if(l.contains(i))
continue;
List des1=new ArrayList(Arrays.asList(new Object[l.size()]));//
Collections.copy(des1,l);
list.add(des1);
des1.add(i);
cal(x-i, des1);
}
list.remove(l);
}
|