• java-无重复的排列组合小技能


    测试工作中,或多或少的会遇到很多字段,需要从中取出特定的个数组合的情况,这时候排列组合就能很好的起到提高效率的作用。

    下面我们一起来看看代码的实现过程:

    package com.practice_03;
    
    
    import java.util.Stack;
    
    public class Book_See {
         //分配一个栈实例
        public static Stack<String> stack = new Stack<String>();
        //统计有多少中组合方式
       static int count = 0;
        public static void main(String[] args) {
            String persons[] = {"小红","小明","小黑","小绿","小蓝","小晨"};
     
            combine(persons,3,0,0); //从6个人中选择3个组合,不能出现重复组合,有多少中组合方式
            System.out.println("总的无重复组合方式有"+count+"种");
    
        }
         
        /**
         * @param persons  所有参与的人
         * @param target   设定组合人数大小,例如:3个人组合 2个人组合
         * @param num      当前栈内有多少个元素
         * @param index    当前数组对应的下标
         *
         */
        private static void combine(String[] persons, int target, int num, int index) {
            //如果栈内元素个数等于设定的组合个数,打印组合,并计数
            if(num == target) {
                System.out.println(stack);
                count = count+1;
                return;
            }
           
            for(int i=index;i<persons.length;i++) {
                //判断栈内是否已经存在元素
                if(!stack.contains(persons[i])) {
                    stack.add(persons[i]);
                    combine(persons, target, num+1, i);
                    stack.pop();
                }
            }
        }
    }

    代码执行输出结果展示如下:

    [小红, 小明, 小黑]
    [小红, 小明, 小绿]
    [小红, 小明, 小蓝]
    [小红, 小明, 小晨]
    [小红, 小黑, 小绿]
    [小红, 小黑, 小蓝]
    [小红, 小黑, 小晨]
    [小红, 小绿, 小蓝]
    [小红, 小绿, 小晨]
    [小红, 小蓝, 小晨]
    [小明, 小黑, 小绿]
    [小明, 小黑, 小蓝]
    [小明, 小黑, 小晨]
    [小明, 小绿, 小蓝]
    [小明, 小绿, 小晨]
    [小明, 小蓝, 小晨]
    [小黑, 小绿, 小蓝]
    [小黑, 小绿, 小晨]
    [小黑, 小蓝, 小晨]
    [小绿, 小蓝, 小晨]
    总的无重复组合方式有20种

    总结:

    1.target设置越大,组合的种类越少;
    2.栈的可以实现字符串的组合排序,那么必然也可以实现数字,字符等的排序。




    学无止境,耐心学习。
  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    stm32内存管理
    STM32CubeMx——ADC多通道采集
    STM32CubeMx——串口使用DMA收发数据
    STM32CubeMx——串口收发
    stm32CubeMx+TrueSTUDIO+uc/os-III移植开发(二)
    stm32CubeMx+TrueSTUDIO+uc/os-III移植开发(一)
    STM32F103RCT6移植到STM32F103C8T6注意事项
    关于STM32F103系列从大容量向中容量移植的若干问题
    KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法
  • 原文地址:https://www.cnblogs.com/momo-nancy/p/15049131.html
Copyright © 2020-2023  润新知