题目
给一个参数n,求这个数的所有整数求和排列,不允许有重复
例如:
* n=10
* 1+2+3+4=10
* 1+2+7=10
* 1+3+6=10
* 1+4+5
* 1+9=10
* 2+3+5=10
* 2+8=10
* 3+7=10
* 4+6=10
例如:
* n=10
* 1+2+3+4=10
* 1+2+7=10
* 1+3+6=10
* 1+4+5
* 1+9=10
* 2+3+5=10
* 2+8=10
* 3+7=10
* 4+6=10
答案、效率不怎么好
package com; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Arithmetic { @SuppressWarnings("unchecked") static List<List> list=new ArrayList<List>(); @SuppressWarnings("unchecked") public static void main(String [] args) throws Exception { int a=5; 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); } } @SuppressWarnings("unchecked") public static void cal(int x,List<Integer> l) { System.out.println("L=" + 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; } /**指定des1集合的长度(即L集合的长度)**/ List des1=new ArrayList(Arrays.asList(new Object[l.size()])); /**将L集合copy给desl集合**/ Collections.copy(des1,l); System.out.println("des1=" + des1); System.out.println("list=" + list); list.add(des1); des1.add(i); System.out.println("des1=" + des1); System.out.println("list=" + list); cal(x-i, des1); } System.out.println("list=" + list); System.out.println("L=" + l); list.remove(l); System.out.println("list=" + list); } }