求字符串的len组合数(java程序)

简介: <p><textarea cols="50" rows="15" name="code" class="java">import java.util.List;import java.util.ArrayList;/** * 求字符串的len组合数 * * @author wenin819 * */public class Combination{ /** * 求组合

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()); } } } }

相关文章
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
146 83
|
2月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
113 60
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
60 26
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
85 1
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
54 6
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
47 0
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
349 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
173 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
88 1