例:数组内共有元素1,2,3,4,5,6 共6个元素,需要得到N个元素组合所有结果,且值按位数递增,如 1234,1345,1356,5613(不符合要求),如何实现?
代码如下:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
ss(4,0,0,list,"");//4为组合维度值,可自由设置
}
public static void ss(int n,int m,int a,List<String> list,String str){
//n 维度大小,m 当前值偏移量,a为当前维度值
//System.out.println("构造方法入口,n:"+n+",m:"+m+",a:"+a);
for(int i = m; i< list.size();i++){
String aa = str+list.get(i)+",";
a++;
if(n-a > list.size() - i -1){
break;
}
if(a >= n){
System.out.println("一组数据完成,结果:"+aa+". n:"+n+",m:"+m+",a:"+a);
a--;
aa = str;
if(i == list.size() - 1){
break;
}
}else{
// System.out.println("一组数据继续构造,当前:"+aa+". n:"+n+",m:"+m+",a:"+a);
ss(n,i+1,a,list,aa);
a--;
}
}
}
}
运行结果如下
一组数据完成,结果:1,2,3,4,. n:4,m:3,a:4
一组数据完成,结果:1,2,3,5,. n:4,m:3,a:4
一组数据完成,结果:1,2,3,6,. n:4,m:3,a:4
一组数据完成,结果:1,2,4,5,. n:4,m:4,a:4
一组数据完成,结果:1,2,4,6,. n:4,m:4,a:4
一组数据完成,结果:1,2,5,6,. n:4,m:5,a:4
一组数据完成,结果:1,3,4,5,. n:4,m:4,a:4
一组数据完成,结果:1,3,4,6,. n:4,m:4,a:4
一组数据完成,结果:1,3,5,6,. n:4,m:5,a:4
一组数据完成,结果:1,4,5,6,. n:4,m:5,a:4
一组数据完成,结果:2,3,4,5,. n:4,m:4,a:4
一组数据完成,结果:2,3,4,6,. n:4,m:4,a:4
一组数据完成,结果:2,3,5,6,. n:4,m:5,a:4
一组数据完成,结果:2,4,5,6,. n:4,m:5,a:4
一组数据完成,结果:3,4,5,6,. n:4,m:5,a:4
符合要求!