public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,6};//原来的元素
int m = 3;//组合元素数量
int result[] = new int[m];//保存结果
show(a,0, result, m,result.length, a.length);
}
//arr为原始数组
//start为遍历起始位置
//result保存结果,为一维数组
//count为result数组的索引值,起辅助作用
//num为要选取的元素个数
//arr_len为原始数组的长度,为定值
static void show(int [] arr, int start, int [] result, int count, int num,int arr_len){//
//最大一循环:从起始位置开始循环到原数组长度+1再减去保存结果的数组长度
//详解:从开始循环到数组最后,然后+1,然后减去count
for (int i = start; i < arr_len + 1 - count; i++){//count如果是3,最后的地方肯定是多两位数
//而这两位数后面已经不能组合了,所以不需要
//进入第二次递归的时候,count会变成2,所以用这样算出到2位数
//进入第三次递归的时候,count就变成1了,所以,用这样算出到1位数
//把暂存数组的第count数修改成i
//每次递归会把count-1,下面的判断会判断count如果=0就进入,输出内容,所以这个是长度,
//递归后,
result[count - 1] = i;//如果result里面有5个限制,先给最后面的赋值
//判断如果count-1=0就进入
//如果count=1的话也就是说数组长度
if (count - 1 == 0){//如果count-1=0就进入//进入一次就输出一次
for (int j = num - 1; j >= 0; j--){//循环输出num位数的j
//输出的内容是原数组的result数组里面的倒过来输出
System.out.print(arr[result[j]]);
}//循环输出完毕之后换行
System.out.println("");
}else{//count-1不等于0//进入递归
//进入递归后
//每次进入递归后开始循环的开始地点就会+1
show(arr, i + 1, result, count - 1,num, arr_len);//一次递归开始重新开始
//离开递归后
}
}
}
使用java递归来完成一个n位数的数组用m个数拼接没有重复
最新推荐文章于 2023-02-01 15:02:34 发布