使用java递归来完成一个n位数的数组用m个数拼接没有重复

   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);//一次递归开始重新开始
                    //离开递归后
                }
               }
         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值