用java实现一个取数据组的所有组合,
比喻一个数组 int[] array = {1,2,3,4,5}
我输入一个3,它就把此数组当中所有以3个元素组合的数组返回
返回的数组应该是
{1,2,3} {1,2,3} {1,2,5}
{1,3,4} {1,3,5} {1,4,5}
{2,3,4} {2,3,5} {2,4,5}
{3,4,5}
当然出可以其他方式返回,比喻List返回也可,只要能取出组合方式就行
用java实现一个取数据组的所有组合,
比喻一个数组 int[] array = {1,2,3,4,5}
我输入一个3,它就把此数组当中所有以3个元素组合的数组返回
返回的数组应该是
{1,2,3} {1,2,3} {1,2,5}
{1,3,4} {1,3,5} {1,4,5}
{2,3,4} {2,3,5} {2,4,5}
{3,4,5}
当然出可以其他方式返回,比喻List返回也可,只要能取出组合方式就行
细节上需要改进。
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=0;i<v.size();i++){
int[] r=v.get(i);
for(int j=0;j<r.length;j++){
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 = 0; i < r.length; i++) {
r[i] = vv.get(i);
}
v.add(r);
return;
}
if (start >= a.length) {
return;
}
for (int i = start; i < a.length; i++) {
vv.add(a[i]);
pro(a, i + 1, n - 1);
vv.remove(vv.size()-1);
}
}
public static void main(String arg[]) {
new Map();
}
}
不用递归能实现吗?就像人家说的,下次输入4你怎么办
可以不用递归
去我c02949.blog.163.com
递归,完美输出所有组合.任意多位,任意数,重复晃重重复.
楼上的方法对你这个是最好的,如果变换就很麻烦.