本文为大家介绍了java实现字符串排列组合问题,供大家参考,具体内容如下
进口java.util.ArrayList; 进口java.util.Collections;/* * *输入一个字符串,按字典序打印出该字符串中字符的所有排列,例如输入字符串abc,则打印出由字符a, b, c所能排列出来的所有字符串abc, acb, bac, * bca,出租车和cba。 * * @author pomay * */公开课Solution_stringarrange { 公共ArrayList排列(String str) { 如果(str==null) 返回null; ArrayList 列表=new ArrayList (); char [] pStr=str.toCharArray (); 排列(pStr 0列表); Collections.sort(列表); 返回列表; } 静态孔隙排列(char [] str, int, ArrayList 列表) {//如果为空 如果(str==null) 返回;//如果我指向了最后一个字符 如果(我==str.length - 1) { 如果(list.contains (String.valueOf (str))) 返回; list.add (String.valueOf (str)); 其他} {//我指向当前我们做排列操作的字符串的第一个字符 for (int j=我;j & lt;str.length;j + +) {//把做排列操作的字符串的第一个字符和后面的所有字符交换 char temp=str [j]; str [j]=str(我); str[我]=temp;//交换后对我后面的字符串递归做排列操作 排列(str,我+ 1,列表);//每一轮结束后换回来进行下一轮排列操作 temp=str [j]; str [j]=str(我); str[我]=temp; } } } 公共静态void main (String [] args) { 字符串str=耙帐跽埂? Solution_stringarrange changestring=new Solution_stringarrange (); ArrayList 列表=changestring.Permutation (str); for (int i=0;我& lt;list.size ();我+ +) { System.out.print (list.get(我)+ " "); } } } >之前 组合:
要么选择长度为n的字符串中的第一个字符,那么要在其余的长度n - 1的字符串中选择m - 1个字符
要么不选择长度为n的字符串中的第一个字符,那么要在其余的长度n - 1的字符串中选择m个字符
进口java.util.ArrayList; 进口并不知道;/* * *输入一个字符串,按字典序打印出该字符串中字符的所有组合,例如输入字符串abc,则打印出由字符a, b, c所能排列出来的所有字符串a, b, c, ab, ac, bc *,abc,求n个字符组成长度为m的组合问题 * * @author pomay * */公开课Solution_stringcombination {//求字符串中所有字符的组合abc> a, b, c, ab, ac,公元前,abc 公共静态孔隙烫(字符串) { List结果=new ArrayList ();//从一个开始 for (int i=1;我& lt;=s.length ();我+ +) { 组合(年代,我,结果); } }//从字符串年代中选择m个字符 公共静态空间组合(字符串,整数m, List 结果) {//如果m==0,则递归结束。输出当前结果 如果(m==0) { for (int i=0;我& lt;result.size ();我+ +) { System.out.print (result.get (i)); } System.out.print (", "); 返回; } 如果(s.length () !=0) {//选择当前元素 result.add (s.charAt (0) + " ");//子串用法,截取出从1开始到n结束的字符串 组合(s。substring (s.length ()), m - 1,结果); result.remove (result.size () - 1);//不选当前元素 组合(s。substring (s.length ()), m,结果); } } 公共静态void main (String [] args) { 字符串str=癮bc”; 烫(str); } } >之前 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
java实现字符串排列组合问题