完成了一种实现,发给你参考下。
不过感觉应该还有更好的办法,有时间我会继续研究下.
import java.util.ArrayListimport java.util.Arrays
import java.util.HashSet
import java.util.List
import java.util.Set
public class TestQiuhe {
//集合a{1,2,3,5,7,10},输出不多于4个元素(不重复)的加和为22的组合。
public static void main(String[] args) {
int[] nums={1,2,3,5,7,10}
int l = nums.length
List<int[]> results=new ArrayList<int[]>()
for(int i1=0i1<li1++){
for(int i2=0i2<li2++){
if(nums[i1]==22){
results.add(new int[]{nums[i1]})
}
if(i2!=i1){
if(nums[i1]+nums[i2]==22){
results.add(new int[]{nums[i1],nums[i2]})
}
for(int i3=0i3<li3++){
if(i3!=i1 && i3!=i2){
if(nums[i1]+nums[i2]+nums[i3]==22){
results.add(new int[]{nums[i1],nums[i2],nums[i3]})
}
for(int i4=0i4<li4++){
if(i4!=i1 && i4!= i2 && i4!=i3){
if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==22){
results.add(new int[]{nums[i1],nums[i2],nums[i3],nums[i4]})
}
}
}
}
}
}
}
}
//去重
Set<String> reSet=new HashSet<>()
for(int[] r:results){
Arrays.sort(r)
reSet.add(Arrays.toString(r))
}
System.out.println("一共得到结果集:"+reSet.size())
System.out.println(reSet)
}
}
运行结果:
一共得到结果集:2
[[5, 7, 10], [2, 3, 7, 10]]
细节上需要改进。import java.util.*public class Map {
Vector<int[]>v = new Vector<int[]>()
Vector<Integer>vv = new Vector<Integer>()Map() {
int[] array = { 1, 2, 3, 4, 5 }
Scanner s = new Scanner(System.in)
int x = s.nextInt()
pro(array, 0, x)
for(int i=0i<v.size()i++){
int[] r=v.get(i)
for(int j=0j<r.lengthj++){
System.out.print(""+r[j]+",")
}
System.out.println()
}
} public void pro(int[] a, int start, int n) {
if (n == 0) {
int[] r = new int[vv.size()]
for (int i = 0i <r.lengthi++) {
r[i] = vv.get(i)
}
v.add(r)
return
}
if (start >= a.length) {
return
}
for (int i = starti <a.lengthi++) {
vv.add(a[i])
pro(a, i + 1, n - 1)
vv.remove(vv.size()-1)
}
} public static void main(String arg[]) {
new Map()
}
}
import java.util.ArrayListimport java.util.Collections
import java.util.Randompublic class RandomTest {
public static void main(String[] args) {
Random random = new Random()
int i = random.nextInt(5) + 1
ArrayList<Integer>list = addNum(i)
Collections.sort(list)
for(Object j:list){
System.out.println(j)}
} public static ArrayList<Integer>addNum(int num) {
ArrayList<Integer>randomnum = new ArrayList<Integer>()
Random random = new Random()
randomnum.add( random.nextInt(5) + 1)
for (int i = 1i <numi++) {
Integer ii = random.nextInt(5) + 1
Boolean b = true
for (int j = 0j <ij++) {
if (randomnum.get(j).equals(ii))
b = false
}
if (b) {randomnum.add(ii)<br> }
else if(!b){
i--
}
}
return randomnum
}}