如“abc”输出结果为:“abc”,“acb”,“bac”,“bca”,“cab”,“cba”
public class AllCombString {
public static int t;//组合个数
public static void main(String[] args) {
String str = "123";
char[] c = str.toCharArray();
println(c)
t++;
allCombString(c,0);
System.out.println(t);
}
public static void allCombString(char[] c,int s){
int l = c.length;
if(l-s==2){
char temp = c[l-1];
c[l-1] = c[l-2];
c[l-2] = temp;
println(c);
t++;
}
else{
for(int i=s;i<l;i++){
moveToHead(c,i,s);
char ct[] = new char[l];
System.arraycopy(c, 0, ct, 0, l);//保持其他元素位置不变
allCombString(ct,s+1);
}
}
}
public static void moveToHead(char[] c,int id,int s){
if(id>s&&id<c.length){
char temp = c[id];
for(int i=id;i>s;i--){
c[i] = c[i-1];
}
c[s] = temp;
println(c);
t++;
}
}
public static void println(char[] c){
System.out.println(new String(c));
}
}
输出结果:
123
132
213
231
321
312
6
设计思路:
1、n个字符,顺序选取其中第1个;
2、在剩下的n-1个字符中,再选取其中的第1个;
3、若剩余的字符只剩下2个,则这两个字符交换位置;若不是,则继续第2步。
4、这是一个典型的递归,无论有多少个字符,到最后只需交换最后两个字符即可。
5、为了能按顺序选取字符(因为递归之后会影响字符的顺序,如:“abcd”经过第一轮递归之后变成“adbc”,这时再执行第2步的话,取到的字符是“d”,而不是“b”),所以这里使用了数组拷贝,for循环不受递归的影响。(这个问题想了老半天,暂时只能用这种方法,即使效率比较低)。
6、组合的个数是字符个数的阶层,如“abc”,组合个数为3!=6
不知道大家有没有更好的方式
分享到:
相关推荐
NULL 博文链接:https://gaoquanyang.iteye.com/blog/1522697
6.1.1 字符串基本操作 Java语言程序设计(第3版) 问题描述 编写一个方法判断字符串是否是回文串。 public static boolean isPalindrome(String s) 思路:取出字符串的第一个和最后一个比较,若不相同,程序结束,...
方法public String toString(),把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,调用上述方法进行验证并实现相应输出。
表达式接口:获取字符串方程的值。 最初取自 StackOverflow。 由 StackOverflow 用户编写的代码:Boann 和 由 StackOverflow 用户编写的代码:Mike Scholtes Boann 的代码是免费的 但被我广泛修改。 输入:Java 字符...
ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...
5.1.3 StringBuffer创建字符串 5.2 连接字符串 5.2.1 与字符串的连接 5.2.2 与其他数据类型的连接 5.3 String字符串操作 5.3.1 基本操作 5.3.2 比较 5.3.3 转化 5.3.4 查找 5.3.5 截取拆分 5.3.6 替换或...
○4创建public型的toString方法,把该类的各域信息(学号,姓名,性别和年龄)组合成一个字符串,如:“141308008,小明,男,20岁”; ○5创建Student类的子类CollegeStudent类(大学生类),添加域:专业,静态域...
107 6.1 数组 107 6.1.1 数组说明和初始化 107 6.1.2 数组的使用 114 6.2 容器和字符串 118 6.2.1 容器 118 6.2.2 字符串 119 习题 123 第7章 Java语言中的异常 126 7.1 异常示例 126 7.2 异常...
字符串(java.lang.String类)的使用 90 字符串相等的判断 92 思考作业 93 上机作业 94 第四章 异常机制 95 导引问题 95 异常(Exception)的概念 96 异常分类 96 Error 97 Error和Exception的区别 97 Exception 97 ...
9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...
4.2.2 字符串的length()方法与性能优化 4.2.3 tochararray()方法与性能优化 4.2.4 字符串转化为数字 4.3 系统i/o类 4.3.1 java语言中输入/输出流 4.3.2 通过系统缓冲流类提高i/o操作效率 4.3.3 通过自定制缓冲区提高...
9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...
实例074 将字符串的每个字符进行倒序输出 94 实例075 获取字符串中汉字的个数 94 实例076 批量替换某一类字符串 95 实例077 把异常与错误信息显示到窗体中 97 实例078 从字符串中分离文件路径、 文件名及扩展名 98 ...
12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 12.4.5随机存取流 12.5对象流 12.5.1存储可变类型的对象 12.5.2理解对象序列化文件格式 12.5.3...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...