黑马程序员技术交流社区
标题:
这个代码怎么写?感觉自己绕进去了。
[打印本页]
作者:
路西法
时间:
2014-3-13 16:19
标题:
这个代码怎么写?感觉自己绕进去了。
编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
例如:
原始字符串是"abc",打印得到下列所有组合情况
“a“,”b“,”c“,”ab“,”ac“,”bc","abc"
还有一种输出是
"a" "b" "c" "ab" "bc" "ca" "ba" "cb" "ac""abc" "acb" "bac" "bca" "cab" "cba"
这个代码怎么写?感觉自己绕进去了。
作者:
上官睿鹏
时间:
2014-3-13 16:47
http://bbs.itheima.com/forum.php?mod=viewthread&tid=104635
点进去看看~之前有人问过这道题~
作者:
syw02014
时间:
2014-3-13 18:54
希望能帮到你:
public class AllSort{
public static void main(String[] args) {
char buf[]={'a','b','c'};
perm(buf,0,buf.length-1);
}
public static void perm(char[] buf,int start,int end){
if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
for(int i=0;i<=end;i++){
System.out.print(buf[i]);
}
System.out.println();
}
else{//多个字母全排列
for(int i=start;i<=end;i++){
char temp=buf[start];//交换数组第一个元素与后续的元素
buf[start]=buf[i];
buf[i]=temp;
perm(buf,start+1,end);//后续元素递归全排列
temp=buf[start];//将交换后的数组还原
buf[start]=buf[i];
buf[i]=temp;
}
}
}
}
复制代码
作者:
杨博
时间:
2014-6-9 14:17
我也在考虑这个题
作者:
一顿一只牛
时间:
2014-8-7 21:14
请问大神们。递归在毕老师的哪个视频讲过呀?
作者:
笑轻轻
时间:
2014-8-28 09:18
char[] ch=str.toCharArray();
}
public static void zzz(String str){
char[] ch=str.toCharArray();
for(int a=0;a<ch.length;a++){
System.out.print(ch[a]+"\t");//打印出单个字母的集合
}
System.out.println();//换行
for(int i=0;i<ch.length;i++){
for(int j=0;j<ch.length ;j++){//此处可以得到二个字母的组合共九个
if((ch[i]==ch[j]))//判断是否出现相同的字母
continue;
System.out.print((ch[i]+""+ch[j])+"\t");//打印出二个字母的组合
}
}
System.out.println();//换行
for(int b=0;b<ch.length;b++){
for(int c=0;c<ch.length;c++){
for(int d=0;d<ch.length;d++){
if(ch[b]==ch[c]||ch[b]==ch[d]||ch[c]==ch[d])//判断是否出现相同的字母
continue;
System.out.print(ch[b]+""+ch[c]+""+ch[d]+"\t");//打印出三个字母的组合
}
}
}
}
作者:
叶尔纳
时间:
2014-10-11 22:59
看看这个,自己写的
package com.itheima;
import javax.swing.plaf.synth.SynthOptionPaneUI;
/*
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
*/
public class Test4 {
public static void main(String[] args) {
// 定义String 类型并赋值
String a = "abc";
// 将String类型转换成char类型的数组。
char[] chr = a.toCharArray();
// 遍历数组
for (int i = 0; i < a.length(); i++) {
System.out.print(chr[i] + " ");
}
System.out.print("\n");
for (int i = 0; i < 2 * a.length(); i++) {
if (i < 3) {
System.out.print(chr[i] + "" + chr[(i + 1) % 3] + " ");
} else {
System.out.print(chr[(i - 2) % 3] + "" + chr[i - 3] + " ");
}
}
// "abc" "acb" "bac" "bca" "cab" "cba"
System.out.print("\n");
for (int i = 0; i < 2 * a.length(); i++) {
if (i < 2) {
System.out.print(chr[0] + "" + chr[i + 1] + chr[2 - i] + " ");
} else if (i < 4) {
System.out.print(chr[1] + "" + chr[(i - 2) * 2] + chr[i % 3]
+ " ");
} else {
System.out.print(chr[2] + "" + chr[i - 4] + chr[5 - i] + " ");
}
}
}
}
作者:
爽朗的菜籽
时间:
2014-10-18 22:24
笑轻轻 发表于 2014-8-28 09:18
char[] ch=str.toCharArray();
}
很感谢,终于有种方法可以看得懂了
作者:
金福林
时间:
2014-11-19 23:42
笑轻轻 发表于 2014-8-28 09:18
char[] ch=str.toCharArray();
}
这个3个循环的情况是实现了,可是多个呢?:(
作者:
jinef
时间:
2015-1-9 18:40
笑轻轻 发表于 2014-8-28 09:18
char[] ch=str.toCharArray();
}
最笨也是最快最明白的代码
作者:
千山万水
时间:
2015-8-3 21:23
有点复杂呢
作者:
pz_xiaoxie
时间:
2015-9-11 17:11
public static void zzz(String str){
char[] ch=str.toCharArray();
for(int a=0;a<ch.length;a++){
System.out.print(ch[a]+"\t");//打印出单个字母的集合
这个方法貌似能看懂
作者:
马塔非耶
时间:
2016-7-7 18:32
String s = "def";
TreeSet<String> set = new TreeSet<>(new Comparator<String>() { //双列集合去重复
public int compare(String s1,String s2) {
int num = s1.length() - s2.length(); //先以长度判断,小的在前
return num == 0 ? s1.compareTo(s2) : num; //在以字典顺序判断;
}
});
for (int i = 0; i < s.length(); i++) { //第一位数
for (int j = 0; j < s.length(); j++) { //第二位数
for (int j2 = 0; j2 < s.length(); j2++) { //第三位数
set.add(s.charAt(j2) + ""); //将单个字符存进集合,它会自己去重复.
if(s.charAt(j2) == s.charAt(j) | s.charAt(j2) == s.charAt(i) | s.charAt(i) == s.charAt(j)) { //判断三个不能重复
continue; //重复就跳出
}else {
set.add(s.charAt(i) + "" + s.charAt(j)); //否则将两个字符的组合加进集合,它会自己去重复
set.add(s.charAt(j) + "" + s.charAt(j2) + s.charAt(i)); //将三个字符的组合加进集合,它会自己去重复
}
}
}
} //遍历集合
for (String string : set) {
System.out.print(string + " ");
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2