场景描述:
我有个测试同事,要测试一个接口,这个接口有多个参数,而且有的参数取值有多个.
比如参数method,可以取值["a","b","c"],并且个数不确定,即method,可以取值ab,也可是是abc
如何获取排列组合的所有值呢?
之前咱们是求排列组合的取值个数,现在要求取值
首先我们考虑常规的情况:
我们有n个盒子,分别放置n个元素
第一回:我们从n个里面选择一个:有n种可能
第二回:我们从n-1个里面选择一个:有n-1种可能
第三回:我们从n-2个里面选择一个:有n-2种可能
第四回:我们从n-3个里面选择一个:有n-3种可能
……
最后我们只有一个可选
直接上代码:直接上代码:
/*** * @param base :[a,b,c,d] * @param times * @param remaining : 剩余要选择的个数 * @return */ public static void assemble(List<String> result, StringBuffer buffer, String base[], int times, int remaining, boolean isSort) { if (remaining <= 1) { buffer.append(base[base.length - 1]); if(times==0||times==base.length-remaining+1){ addElementBySort(result, buffer, isSort); } } else { for (int i = 0; i < remaining; i++) { StringBuffer bufferTmp = new StringBuffer(buffer); bufferTmp.append(base[base.length - 1 - i]); if(times==0||times==base.length-remaining+1){ addElementBySort(result, bufferTmp, isSort); } assemble(result, bufferTmp, SystemHWUtil.aheadElement(base, base.length - 1 - i), times, remaining - 1, isSort); } } }
参数说明:
base | 样本 | [a,b,c,d] |
remaining | 剩余可选择的样本个数 | |
times | 组合的个数 |
工具类完整代码:
package com.common.util; import com.string.widget.util.ValueWidget; import java.util.ArrayList; import java.util.List; /** * Created by huangweii on 2016/1/23. */ public class AssembleUtil { /*** * @param base :[a,b,c,d] * @param times * @param remaining : 剩余要选择的个数 * @return */ public static void assemble(List<String> result, StringBuffer buffer, String base[], int times, int remaining, boolean isSort) { if (remaining <= 1) { buffer.append(base[base.length - 1]); if(times==0||times==base.length-remaining+1){ addElementBySort(result, buffer, isSort); } } else { for (int i = 0; i < remaining; i++) { StringBuffer bufferTmp = new StringBuffer(buffer); bufferTmp.append(base[base.length - 1 - i]); if(times==0||times==base.length-remaining+1){ addElementBySort(result, bufferTmp, isSort); } assemble(result, bufferTmp, SystemHWUtil.aheadElement(base, base.length - 1 - i), times, remaining - 1, isSort); } } } /*** * @param base * @param times * @param isSort : 是否对"acb"进行排序,<br />排序结果:"abc" * @return */ public static List<String> assemble(String base[], int times, boolean isSort) { // Set<String> result = new HashSet<String>(); List<String> result = new ArrayList<String>(); AssembleUtil.assemble(result, new StringBuffer(), base, times, base.length, true); return result; } public static void addElementBySort(List<String> result, StringBuffer buffer, boolean isSort) { String str = buffer.toString(); if (isSort) { str = ValueWidget.sortStr(str); } if (result.size() == 0 || (!result.contains(str))) { result.add(str); } } /*** * 参数的取值个数,ab和ba算一种 * * @param argCount * @return */ public static int getAssembleSum(int argCount) { int sum = 0; for (int i = 0; i < argCount; i++) { int count = i + 1;//参数组合的个数 sum += (SystemHWUtil.factorial(argCount, count) / SystemHWUtil.arrayArrange(count)); } return sum; } }
依赖jar包见附件:
参考:
相关推荐
在C#编程中,排列组合算法是解决许多数学和计算机科学问题的基础,特别是在处理数据排序、统计计算以及算法设计时。本实例详细介绍了如何利用C#实现这两种基本的算法:排列(Permutation)和组合(Combination)。...
基于C语言排列组合算法 排列组合是计算机科学中一个重要的概念,它广泛应用于数学、统计学、计算机科学等领域。排列组合问题的算法设计是指如何高效地生成所有可能的排列或组合。今天,我们将讨论基于C语言的排列...
在编程领域,排列组合是算法中的一个重要概念,用于解决各种问题,如数据分析、优化路径、游戏逻辑等。在C#中实现排列组合类可以提供一套高效的方法来处理这些问题。本篇将详细介绍C#中实现排列组合类的关键知识点,...
### MATLAB中的排列组合知识点 #### 一、MATLAB排列组合函数概述 在MATLAB中,排列组合相关的函数被广泛应用于统计学、概率论以及各种工程计算领域。这些函数可以帮助我们解决许多数学问题,如组合数量的计算、...
实际应用中,排列组合算法广泛应用于各种场景,如密码生成、数据分析、游戏逻辑、机器学习模型的参数搜索等。例如,在设计一个密码生成器时,可以利用组合算法生成所有可能的字符组合,以确保密码的多样性。 总的来...
在这个“基于C语言的排列组合算法”中,我们将深入探讨这两个概念以及如何使用C语言来实现它们。 排列是有限集合中的元素的一种有顺序的排列方式。在C语言中,我们可以使用递归方法来实现排列算法。首先,我们需要...
根据给定的文件信息,我们可以总结出以下关于C++中排列组合算法的知识点: ### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中...
在编程领域,数组排列组合问题是一个经典的问题,它涉及到算法设计和数据结构的理解。这个问题的主要目标是从给定的n个数组中找出所有的可能排列组合。Java作为一种强大的编程语言,提供了丰富的工具和方法来解决...
### C经典算法之排列组合 #### 知识点解析 **排列组合**是计算机科学与数学中的一个重要概念,广泛应用于密码学、数据处理、优化问题等领域。本篇内容主要介绍了如何利用C语言实现一个基本的排列算法。 #### 排列...
在Python编程语言中,处理排列组合问题是一种常见的需求,特别是在数据处理、算法设计以及数学建模等领域。Python的标准库提供了`itertools`模块,它包含了多种生成排列组合的方法,使得处理这些问题变得简单而高效...
在编程领域,排列组合是一种常见的算法问题,尤其在数据结构和算法的学习中占有重要地位。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指从n个不同元素中不考虑...
【排列组合的算法作业 Java】 在编程领域,排列和组合是经典的算法问题,它们属于组合数学的一部分,常常出现在数据结构与算法课程的作业中。排列指的是从给定的元素集合中选择并按特定顺序排列所有可能的组合,而...
问题的具体描述如下:给定一个整数`M`,程序需要输出由数字`1`、`2`、`3`、`4`组成的长度为`M`的所有排列组合。例如,当`M=3`时,输出如下: ``` 1,1,1 1,1,2 ... 4,4,4 ``` 共有64种不同的排列组合。需要注意的是...
在编程领域,排列组合是一种常见的算法问题,尤其在解决数学问题和优化问题时十分关键。在给定的“vc排列组合”程序中,我们聚焦于使用VC++(Visual C++)来实现这个问题。VC++是一种功能强大的开发环境,支持C++...
《易语言排列组合模拟工具详解》 在计算机科学和编程领域,排列组合是组合数学中的基本概念,广泛应用于数据分析、算法设计以及各种游戏设计中。本文将深入探讨易语言排列组合模拟工具,揭示其在游戏开发中的应用...
排列组合算法的递归实现 排列组合是数学中的一种基本概念,指的是从一个集合中选择若干个元素,考虑其顺序的排列方式。排列组合的计算在计算机科学和数学中有非常广泛的应用,例如数据分析、机器学习、密码学等领域...
例如,如果需要找出10个数字中取3个的所有组合,只需更改m的值为3即可。 至于标签中的“小程序”,可能指的是小型的Java程序或应用,用于演示或测试组合排列的算法。在这个场景下,可以编写一个简单的命令行程序,...
在易语言中,递归法是解决某些问题的一种有效策略,特别是在处理排列组合问题时。递归法是一种函数或过程调用自身的技术,通过不断自我调用来解决问题,尤其适用于数据结构如树、图以及数学上的排列组合计算。 排列...
java数组排列组合问题汇总 java数组排列组合问题是java编程中的一类经典问题,涉及到数组的排列和组合两个方面。排列和组合是离散数学中的一些基本概念,java数组排列组合问题就是将这些概念应用于java编程中。 在...
排列组合是高中数学中的核心知识点,它涉及到统计和概率的基础理论,对于解决实际问题和理论研究都有着重要作用。本文主要归纳了高考中常见的排列组合概念及其应用。 首先,我们需要理解两个基本计数原理:分类计数...