java 字符串是"abc",打印得到所有组合情况,求解思想

package temp;/** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 例如:
原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba" * @author Administrator * */import java.util.LinkedHashSet;import java.util.Set;
public class Demo { public static void main(String[] args) { String input = "abc"; // 求a/b/c三个字符的全排列 Set<String> results = new LinkedHashSet<String>(); results.add(""); for (int i = 0; i < input.length(); i++) { for (int j = 0; j < input.length(); j++) { String current = input.substring(j, j + 1); Set<String> newones = new LinkedHashSet<String>(); for (String s : results) { if (s.indexOf(current) == -1) { s += current; } newones.add(s); } results.addAll(newones); } } results.remove(""); for (String s : results) { System.out.println(s); } System.out.println(results.size()); }}

代码贴上来有点乱弄一张图片,图片和代码内容一样啊~~


import java.util.Arrays;
import java.util.LinkedList;

public class Tester
{
public static void recursionSub ( LinkedList<String[]> list, int count, String[] array, int ind, int start, int... indexs )
{
start++;
if (start > count - 1)
{
return;
}
if (start == 0)
{
indexs = new int[array.length];
}
for ( indexs[start] = 0; indexs[start] < array.length; indexs[start]++ )
{
recursionSub (list, count, array, 0, start, indexs);
if (start == count - 1)
{
String[] temp = new String[count];
for ( int i = count - 1; i >= 0; i-- )
{
temp[start - i] = array[indexs[start - i]];
}
boolean flag = true;
L: for ( int i = 0; i < temp.length; i++ )
{
for ( int j = i + 1; j < temp.length; j++ )
{
if (temp[i] == temp[j])
{
flag = false;
break L;
}
}
}
if (flag)
{
list.add (temp);
}
}
}
}

public static void main ( String[] args )
{
String string = "a,b,c";
String[] A = string.split (",");
LinkedList<String[]> list = new LinkedList<String[]> ();
for ( int i = 1; i <= A.length; i++ )
{
recursionSub (list, i, A, 0, -1);
for ( String[] strings : list )
{
System.out.print (Arrays.toString (strings).replaceAll ("[\\[\\]\\,\\s]", "") + " ");
}
System.out.println ();
list.clear ();
}
}
}

追问

你这方法是写死的把?如果换成abcd就不行了把?
您能帮我看看我发的那个方法么?
能用我也能看懂,就是想把那个方法的思想了解一下~~

追答

是不是die的,试试就知道了,我知道你并没有试。

追问

抱歉抱歉~~看见有好几层for以为是写死的了……
递归做的~~不好意思啊~~
但是您能帮我讲讲我贴上去的那个代码么?
我是不太懂那个代码的思想啊……

温馨提示:内容为网友见解,仅供参考
无其他回答

急:用java或者js\/jquery对字符串如:ABC输出它的所有组合
count, array, ind, start, indexs ){start++;if (start > count - 1){return;}if (start == 0){indexs = new Array(array.length);}for

京东商城的笔试题:用java语言打印出a,b,c,d的所有可能组合……求指点...
如果是这样,那代码如下,其中心思想就是递归 import java.util.ArrayList;import java.util.List;public class Permutation { private char initial;private char last;List<Character> chars=new ArrayList<Character>();public static void main(String[] args) { new Permutation('a','d').start()...

排列组合--原理及实现
-->全排列:递归 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理 从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例:固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac 固定b,求后面ac的排列:bac,...

java 列出一个字符串的全字符组合情况,不考虑重复字符
public static void main ( String[] args ){getSub ();for ( char[] cs : list ){System.out.println (Arrays.toString (cs));}}private static LinkedList<char[]> getSub (){while (count <= len){recursionSub (0, -1);

java 如果我输入小写abc 怎么把它变成大小写的组合但位置不变
import java.util.Scanner;public class StringToUper { \/\/ 得到一个数组中不同的组合形式--从min个到max个 \/\/ 虽然本例没有使用,但在其他应用中还是可以用到的 public ArrayList<Object[]> getZhFromAry(Object[] ary, int max, int min)throws Exception { int len = ary.length;if (max ...

java算法问题 排列组合 给定一组字符串,产生所有可能的集合
import java.util.List;public class Combinations { \/ 设有n个元素,组合数量有2的n次方种。对 0 到 2的n次方-1 中的每个数,考察其二进制位形式,位数为1代表相应元素加入 到组合,0则不加入该元素至组合。取组合方法 参数: list --- 原始数组 返回: 包含所有组合数组的数组 \/ public st...

JAVA 一个字符串"xxxxabcabc" 如何去掉字符串前四个xxxx是四个不固定...
处的字符串 例:String str=“xxxxabcdefg”;要去掉前面四个的话。就是要获得该字符串索引为4-最后的这段字符。String result=str.substring(4);\/\/不写结束索引既表示从起始索引开始到该字符串最后全部截取获得。string result =str.substring(4,str.length());str.length()是获得字符串的长度 ...

为什么java中输出字符数组名得到的是数组的内容
首先你可以参考这个帖子 网页链接 字符类型的数组名确实是地址,只不过是在println函数中有一个重载方法,这个重载方法根据地址找到了所有字符并返回给了这个方法,所以你看到了你例子中异常的地方。

...参数abc 以实现将字符串a中的所有b替换成c(String.replaceAll函数不可...
你看下是不是你需要的,希望采纳!public class StringTest { \/ <一句话功能简述> <功能详细描述> param args see [类、类#方法、类#成员]\/ public static void main(String[] args) { \/\/ TODO Auto-generated method stub String a = "aabbccbb";String b = "bb";String c = "eeee";...

Java编程:将字符串12345abc转换成ABC12345输出
使用正则分别提取英文和数字,英文再转大写、再组合起来 补答,优化一下楼上的 \/\/原回答每个字符都调用toUpperCase String str = "12345abc".toUpperCase();StringBuilder newLetter = new StringBuilder();StringBuilder newNumber = new StringBuilder();for(int i=0; i<str.length(); i++){ c...

相似回答