先按大小排序,然后从高到低查找和为10的数
public class Test
{
public static final int SUM = 10;
private static int[] result = new int[SUM];

public static void print()
{
for (int i = 0; i < SUM && result[i] != -1; i++)
{
System.out.print(result[i] + " ");
}
System.out.println();
}

public static void sort(int[] arr)
{
int temp;
for (int i = 0; i < arr.length; i++)
{
for (int j = i; j < arr.length; j++)
{
if (arr[j] > arr[i])
{
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}

public static void getNum(int[] arr, int start, int len, int value)
{
if (value < 0 && (value > 0 && len == 10))
{
return;
}
else if (value == 0 && len < 10)
{
result[len] = -1;
print();
}
else if (value == 0)
{
print();
}

for (int i = start; i < arr.length; i++)
{
result[len] = arr[i];
getNum(arr, i + 1, len + 1, value - arr[i]);
}
}

public static void main(String[] args)
{
int a[] = {1,4,5,8,7,2,3};
sort(a);
for (int i = 0; i < a.length; i++)
{
getNum(a, 0, 0, SUM);
}
}
}