从指定集合中获取元素组合成不同的字符串.
- 组合生成类(Combination.java)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author hymanz 506600909@qq.com
*
*/
public class Combination {
private char[] base;
public Combination(char[] base) {
this.base = base;
}
public List<char[]> getCombinations(int length) {
List<char[]> list = new ArrayList<char[]>();
list.add(new char[length]);
return compose(0, list);
}
private List<char[]> compose(int index, List<char[]> list) {
if (index >= list.get(0).length) {
return list;
}
for (int i = 0, size = list.size(); i < size; i++) {
char[] item = list.get(i);
for (int j = 0; j < base.length; j++) {
if (j > 0) {
item = copy(item);
list.add(item);
}
item[index] = base[j];
}
}
return compose(++index, list);
}
private char[] copy(char[] item) {
return Arrays.copyOf(item, item.length);
}
}
- 调用方式
public class Main {
public static void main(String[] args) {
char[] base = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Combination combination = new Combination(base);
List<char[]> result = combination.getCombinations(3);
for (char[] cs : result) {
System.out.println( new String(cs));
}
}
}
相关推荐
List<String> location=new ArrayList(); 一行代码轻松搞定混合排序问题 Collections.sort(location, new SortUtils(true));
在实际编程中,全排列的算法不仅适用于字符数组,还可以应用于数字数组或其他可比较类型的数组,为解决各种排列组合问题提供基础。理解并掌握这种算法,对于提升Java编程能力,特别是在处理复杂问题时,是非常有帮助...
本文将详细介绍一个Java实现的自定义加密算法案例,该算法通过组合数字、小写字母、大写字母以及特殊字符来生成加密字符串,并采用随机打乱顺序及添加校验和的方式来增强其安全性。 #### 二、加密算法核心逻辑 1. ...
由于汉字与数字在数据结构和编码上的本质差异,混合排序需要特定的算法和技术来实现。以下将详细介绍汉字和数字混合排序的相关知识点。 首先,我们要了解汉字和数字在计算机中的存储方式。汉字通常使用Unicode编码...
这个名为“Java经典算法源码实例”的资源集合提供了一系列用Java语言实现的常见算法,对于深入理解算法原理、提高编程技能以及优化代码性能具有极大的帮助。下面,我们将详细探讨这些算法及其应用。 1. **排序算法*...
在使用这个JavaScript版的SM3算法时,开发者可以首先使用`parse`方法处理输入的字符串,将其转化为适合算法处理的数据格式。接着调用SM3核心函数进行散列计算,最后可能使用`stringify`方法将得到的散列值转化为可读...
这种加密算法因其复杂性和在当时的安全性而受到赞誉,它通过使用多个凯撒密码(每个字母按固定位数偏移)的组合来构建一个可变的密钥表,使得加密过程更为复杂,难以破解。 在Java中实现维吉尼亚加密算法,我们需要...
同时,Java的字符串操作函数,如`substring()`和`indexOf()`,会在分词算法中起到关键作用。 在压缩包中的“FMM”文件可能是实现了FMM算法的Java源代码,可能包括类定义、方法实现以及测试用例。阅读这些代码有助于...
System.out.println("对字符数组进行部分排列;A(4,3)"); String str="abc"; char[] chArray=str.toCharArray(); Arrange strArrange=new Arrange(chArray.length); while(strArrange.hasMore()){ ...
在数字图像处理中,它可以用来分割粘连在一起的字符,因为字符间的边界可以通过模拟水滴的流动和分离来界定。这种算法通过模拟水滴的运动和聚集,可以有效地识别和分离图像中的各个独立元素,即使这些元素在图像中...
在Java中,我们可以利用这种算法来实现一个自定义的解析器,用于处理复杂的计算任务或者解析特定的语法结构。 算符优先算法的核心思想是使用一个算符优先表,这个表定义了每个运算符的优先级和结合性。运算符的...
这种算法通常用于找到一组解决方案(称为“个体”或“染色体”)中的最优解,这些解决方案可以是数字、字符串或其他复杂结构。 Java作为一种多平台支持的编程语言,提供了丰富的库和工具来实现遗传算法。在"遗传...
5. **提取信息**: 对隐藏了信息的图像,重复上述过程,但这次是读取像素的LSB并组合成二进制字符串,再将其转换回文本。 **Java实现注意事项** - 图像格式:不同的图像格式可能会影响LSB算法的效果。例如,JPEG...
【程序 11】这道题要求生成没有重复数字的三位数组合。可以使用三重循环,依次填充百位、十位和个位,排除重复数字。 【程序 12】奖金提成问题需要根据利润范围设定不同的提成比例。可以创建一个分段函数,根据输入...
2. **密钥设计**:密钥为UTF-8编码的文本文件,长度可自定义,至少8位,最多65535位,由数字和字母组合而成。密钥与算法分离,增强了系统的安全性。 3. **串号计算**:串号是基于密钥通过特定数学运算得出的无意义...
根据给定的文件信息,我们可以总结出以下几个Java算法的经典题目及其相关知识点: ### 1. 输出九九乘法表 这段代码实现了一个简单的九九乘法表的输出功能。通过两个嵌套的for循环,实现了从1×1到9×9的所有乘法...
它们组合成第一个基本字符串,如果字典中没有这个字符串,就将它添加到字典中,当前前缀写入代码流,当前码作为新的当前前缀。接着,读取下一个字符作为新的当前码,以此类推。如果在字典中找到了当前前缀和当前码...
**简介**:MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,能够将任意长度的数据转换成一个固定长度(通常为128位)的十六进制数字字符串。这种转换过程是不可逆的,即无法从散列值恢复原始数据。因此...
这些份额可以是数字、字符或其他形式的数据。只有当一定数量的份额集合在一起时,才能重新组合出原始的秘密。这种技术在分布式系统、密码学和数据保护中具有广泛应用。 **Shamir门限秘密共享算法**是由Adi Shamir在...