import java.util.List;
import java.util.ArrayList;
/**
* 求字符串的len组合数
*
* @author wenin819
*
*/
public class Combination{
/**
* 求组合数的主要方法
*/
public static List<String> combination(String inStr, int len){
StringBuffer noDoubleStr =new StringBuffer(inStr);
noDouble(noDoubleStr);
if( len >= noDoubleStr.length()) return null;
return combinationItem(noDoubleStr , len);
}
/**
* 去除重复的字符
*/
public static void noDouble(StringBuffer input){
for(int i = 0; i < input.length(); i++){
char temp = input.charAt(i);
for(int j = i+1; j < input.length(); ){
if(temp == input.charAt(j)){
input.deleteCharAt(j);
}else{
j++;
}
}
}
}
/**
* 求组合数
*/
public static List<String> combinationItem(StringBuffer input, int len){
List<String> rsList = new ArrayList<String>();
boolean[] array = new boolean[input.length()];
for(int i = 0; i < array.length; i++){
array[i] = false;
}
do{
if(len == countOfTrue(array)){
StringBuffer temp = new StringBuffer(input);
for(int j = temp.length() - 1;j >= 0;j--){
if(array[j]) continue;
temp.deleteCharAt(j);
}
rsList.add(new String(temp));
}
}while(booleanAdd(array));
return rsList;
}
/**
* 求boolean数组元素为true的个数
*/
public static int countOfTrue(boolean[] array){
int count = 0;
for(int i = 0;i < array.length;i++){
if(array[i]) count++;
}
return count;
}
/**
* boolean数组自加(同2进制加1)
*/
public static boolean booleanAdd(boolean[] array){
boolean flag = true;
for(int i = 0;i < array.length; i++){
if(false == flag) return true;
if(array.length-1 == i && true == array[i]){
array[i] = false;
return false;
}
if(false == array[i]){
array[i] = true;
return true;
}
array[i] = false;
}
return false;
}
public static void main(String[] args){
String input = new String("abcde");
int len = 3;
if(args.length > 1){
input = args[0];
len = Integer.parseInt(args[1]);
}
List list = combination(input,len);
if(list != null){
System.out.println(input+"的"+len+"组合数的个数为:"+list.size()+"/n组合数分别为:");
for(int i = 0; i < list.size(); i++){
System.out.println(i+1+": "+list.get(i).toString());
}
}
}
}
求字符串的len组合数(java程序)
时间: 2024-09-21 21:28:31
求字符串的len组合数(java程序)的相关文章
java程序调用存储过程得到新增加记录的id号的方法
关于ms sql server2000的存储过程,主要作用是在表test中插入一条记录,然后得到新增加记录的id号. test表三个字段:ID:自动增长yhm:用户名 字符串类型kl: 密码 字符串类型 请问在java程序中如何调用这个存储过程才能实现,得到新增加记录的id号 存储过程如下:CREATE PROCEDURE yh_insert @yhm varchar(50),@kl varchar(50) AS begin set nocount on insert into tes
查询 文件读写-java程序字符串问题(求大牛帮忙)
问题描述 java程序字符串问题(求大牛帮忙) 一个文件夹中(可能包含多个文本文件或子文件夹),查询其中包含关键字(至少一个)的文本文件然后输出这个文本文件的路径和所包含的关键字.关键字也存放在一个文本文件当中.不知程序该怎么写(java菜鸟,求大牛帮忙).关键字不区分大小写,一般只有字母和ASCII码组成,要忽略空格.最后的结果也要输出在一个文本文件上 解决方案 这个的话 第一个就这么个思路了 1:写一个递归算法 遍历到当前文件夹下的所有子文件(包括文件夹) 如果是文本文件的话则调用查找关键字
求字符串全排列的递归算法(java程序)
import java.util.ArrayList; import java.util.List; /** * 求字符串的全排列 * * @author wenin819 * */ public class Arrange { /** * 判断调用求排列的主要方法 */ public static List<String> arrange(String input){ if(null == input || 0 == input.length()){ System.out.println(&
java程序报错,求大神找bug
问题描述 java程序报错,求大神找bug package arraysofobjects; import java.util.Scanner; public class arraysofobjects { public static void main(String[] args) { Scanner input=new Scanner(System.in); students[] stu=new students[4]; String name; int grade; for(int i=0
java求字符串型逻辑表达式的bool值
这是最近在项目中的一个需求,已知a=3,求字符串"a<=2"的值,也就是应该返回false.这个问题可大可小,就我们的应用场景也就是用来让用户自定义变量区间,比如类似下面这样的规则: a<=2 返回积分系数1.0 2<a<=5 返回积分系数1.1 a>5 返回积分系数1.2 如果用switch写死在代码中,以后要修改规则实在是很麻烦的事情,用户也希望能自己维护这样些区间值.于是我想就让用户自己输入这样的表达式和变量的值保存在数据
java 字符串 报错-java程序在eclipse运行正确,在牛客网测试界面运行报错
问题描述 java程序在eclipse运行正确,在牛客网测试界面运行报错 在eclipse可以正常运行,在牛客网的测试里报错:"运行错误:请检查是否存在数组越界非法访问,野指针乱访问,空指针乱访问等情况." 题目:连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: ?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 import java.util.Sca
字符串处理-求大神帮解决如下程序,最基本的C语言字符串类型,不用编太难(如下为问题要求,测试用例,输出用例)
问题描述 求大神帮解决如下程序,最基本的C语言字符串类型,不用编太难(如下为问题要求,测试用例,输出用例) Background Given an m by n grid of letters and a list of words, find the location in the grid at which the word can be found. A word matches a straight, uninterrupted line of letters in the grid.
求大神解答关于java string字符串的问题,现有如下要截取,希望按括号分组
问题描述 求大神解答关于java string字符串的问题,现有如下要截取,希望按括号分组 如下字符串:希望每个括号之间的内容分一组变成子字符串,或者输出到文本每个括号之间的内容为一行.丢弃其余的部分 CF --> ('c1,t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t
求一个能从数据库读取数据并显示到坐标图上的java程序
问题描述 求一个能从数据库读取数据并显示到坐标图上的java程序 新手学java,但是现在急需一个能从数据库读取数据并显示到坐标图上的java程序,希望各位能够给一点帮助,谢谢了 解决方案 http://www.open-open.com/lib/view/open1337915511824.htmlhttp://blog.csdn.net/sjf0115/article/details/7059407 解决方案二: