给出需要组合的字符串,最小长度,最大长度
算出所有不重复的组合
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Weave {
private BufferedReader in;
private InputStreamReader is;
private char[] chars;
private int charLen;
int min;
int max;
int count = 0;
public Weave(){
open();
String str = getStrInput("请输入需要组合的字符穿:");
chars = str.toCharArray();
charLen = chars.length;
min = getIntInput("请输入需要组合的最小长度:");
max = getIntInput("请输入需要组合的最大长度:");
close();
}
public static void main(String[] args) {
Weave weave = new Weave();
long begin=System.currentTimeMillis();
weave.combination();
weave.loger("执行时间:"+(System.currentTimeMillis() - begin)+"毫秒");
}
public void combination(){
count = 0;
if (min>max){
int t = max;
max = min;
min = t;
}
for (int i= min;i<=max;i++){
combination(new StringBuffer(""),i);
}
}
public void combination(StringBuffer str,int length) {
if (length < 1){
loger("长度小于1");
}
if (length == 1){
for(int i=0;i<charLen;i++){
StringBuffer result = new StringBuffer(str);
result.append(chars[i]);
//根据组合的结果执行某些操作
doSome(result);
}
}
if (length > 1) {
for(int i=0;i<charLen;i++){
StringBuffer temp = new StringBuffer(str);
combination(temp.append(chars[i]),length-1);
}
}
}
public void doSome(StringBuffer str){
count++;
loger(count + ". " +str);
}
public int getIntInput(String info) {
int temp=0;
loger("\n"+info);
try {
temp=Integer.parseInt(in.readLine());
}
catch(Exception e) {
loger("错误!!请从新输入");
return getIntInput(info);
}
if(temp<=0) {
loger("\n错误!!必须大于0!");
return getIntInput("从新输入 : ");
}
return temp;
}
public String getStrInput(String info) {
loger("\n"+info);
String temp = "";
try {
temp = in.readLine();
} catch (IOException e) {
loger(e);
}
if(null == temp || "".equals(temp)) {
loger("\n错误!!不能输入空字符串!");
return getStrInput("从新输入 : ");
}
return temp;
}
/**
* 反馈信息
* @param o
*/
public void loger(Object o){
System.out.println(o.toString());
}
public void close(){
try {
is.close();
in.close();
} catch (IOException e) {
loger(e);
}
}
public void open(){
is = new InputStreamReader(System.in);
in=new BufferedReader(is);
}
}
分享到:
- 2007-07-21 09:39
- 浏览 2412
- 评论(0)
- 论坛回复 / 浏览 (0 / 2934)
- 查看更多
相关推荐
2. **ArrangeCombine.java** 可能是一个实现排列和组合的混合类,其中可能包括了`arrangeCombine`方法,既可以生成排列也可以生成组合。 3. **Arrange.java** 可能是专门处理排列的类,其`arrange`方法会使用类似于...
本文将深入探讨如何在Java中实现排列组合,特别是基于描述中提到的"利用list及set的无序性"的方法。 首先,让我们理解排列和组合的基本概念。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列...
总之,这个资源包提供了一个很好的平台,让你能够深入理解并实践Java中的排列组合算法。通过学习和理解这些代码,你不仅可以增强算法设计能力,还能提高解决实际编程问题的能力。记得动手实践,结合文档和代码,将...
Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客
本文将深入探讨Java中实现排列组合算法的方法,帮助开发者更好地理解和运用这些概念。 排列是有序的选择,而组合是无序的选择。在Java中,我们可以使用递归、回溯法或者迭代的方式来实现这两种算法。下面我们将详细...
压缩包中的文件名为“Zuhe”,可能是实现组合排列算法的Java源代码文件。通过查看这个文件,我们可以了解具体的实现细节,包括使用的数据结构、递归或非递归的策略,以及如何处理边界条件等。 总的来说,组合排列是...
总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...
这个"实现了排列组合算法的类(JAVA).rar"文件提供了一种高效的JAVA实现,可以处理任意类型数组的排列和组合。下面将详细讨论排列组合的基本概念,以及在JAVA中实现这些算法的关键点。 排列是指从n个不同元素中...
根据给定文件的信息,我们可以总结出以下关于Java中m取n排列组合的实现方式,包括重复与不重复的情况,以及如何使用for循环嵌套和递归来实现这些算法。 ### Java中m取n排列组合实现 #### 一、背景介绍 在计算机...
6位数,共有几种排列组合的算法,java实现
java数组排列组合问题是java编程中的一类经典问题,涉及到数组的排列和组合两个方面。排列和组合是离散数学中的一些基本概念,java数组排列组合问题就是将这些概念应用于java编程中。 在java数组排列组合问题中,...
【排列组合的算法作业 Java】 在编程领域,排列和组合是经典的算法问题,它们属于组合数学的一部分,常常出现在数据结构与算法课程的作业中。排列指的是从给定的元素集合中选择并按特定顺序排列所有可能的组合,而...
该资源提供了Java中排列组合的全面指南。文档讲解了排列组合的基本概念,包括如何计算阶乘、如何生成排列和组合,以及如何将这些概念应用于解决实际问题。 此外,文档还提供了各种排列组合算法的详细代码示例和实现...
在IT行业中,排列组合生成器是一种常见的工具,用于生成所有可能的排列或组合,这在很多领域都有应用,比如数据分析、密码学、游戏设计、测试用例生成等。本项目专注于后端实现,使用了SpringBoot框架,这是一种流行...
总之,这个Java程序结合了组合数学的排列概念和递归算法,通过深度优先搜索策略生成排列,并可能提供用户友好的界面展示。理解和掌握这些知识对于提升编程能力,特别是在算法设计和问题求解方面,有着显著的帮助。
排列组合---java如何进行排列组合运算---包含完整代码,适合使用java代码学习排列组合。
排列与组合的Java递归实现.doc
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
Java实现多个数组间的排列组合 Java实现多个数组间的排列组合是Java编程中的一种常见需求。例如,在手机销售中,手机有不同的颜色、尺寸和版本,这些属性之间存在排列组合关系,需要使用Java语言实现这些排列组合。...
Java排列组合源码实例,对已知数进行最大限度组合,有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不...