首页 java 字符串全排列大全 (已解决重复问题)

java 字符串全排列大全 (已解决重复问题)

举报
开通vip

java 字符串全排列大全 (已解决重复问题)java 字符串全排列大全 (已解决重复问题) //字符串全排列问题 (解决了重复问题) import java.util.*; public class ListALL { static int count=0; public static void main(String[] arg) { Scanner r=new Scanner(System.in); String s=r.nextLine(); Pailie(s, " "); System.out.println("共有 "+count...

java 字符串全排列大全 (已解决重复问题)
java 字符串全排列大全 (已解决重复问题) //字符串全排列问题 (解决了重复问题) import java.util.*; public class ListALL { static int count=0; public static void main(String[] arg) { Scanner r=new Scanner(System.in); String s=r.nextLine(); Pailie(s, " "); System.out.println("共有 "+count+"种情况"); } static void Pailie(String s,String p) { if(s.length()<1) { System.out.println(p);//字符串长度小于1,换行 count++; } else{ int index[]=new int[s.length()]; for(int i=0;i> insert( LinkedList> list, char inserChar) { LinkedList> reValue = new LinkedList>(); LinkedList temp1; LinkedList temp2; for (int i = 0; i < list.size(); i++) { temp1 = list.get(i); for (int j = 0; j <= temp1.size(); j++) { temp2 = (LinkedList) temp1.clone(); // temp2 = copy(temp1); temp2.add(j, inserChar); reValue.add(temp2); } } return reValue; } public LinkedList> paixu() { char[] inputChar = this.input.toCharArray(); LinkedList> ini = new LinkedList>(); LinkedList> reValue = new LinkedList>(); LinkedList temp = new LinkedList(); temp.add(inputChar[0]); ini.add(temp); for (int i = 1; i < inputChar.length; i++) { ini = insert(ini, inputChar[i]); if(i==inputChar.length-1) reValue.addAll(ini); } return reValue; } // @param args public static void main(String[] args) { ListALL q = new ListALL("121"); LinkedList> reValue = q.paixu(); for (int i = 0; i < reValue.size(); i++) { System.out.print("第"+(i+1)+"个"); LinkedList temp1 = reValue.get(i); for (int j = 0; j < temp1.size(); j++) { System.out.print(temp1.get(j)); } System.out.println(); } } }*/ /*public class ListALL { public static int t=0;// 组合个数 public static void main(String[] args) { String str = "1234"; char[] c = str.toCharArray(); //println(c); //t++; allCombString(c, 0); System.out.println(t); } public static void allCombString(char[] c, int s) { int len = c.length; if (s == len-1) { println(c); t++; } else { for (int i = s; i < len; i++) { moveToHead(c, i, s); //char ct[] = new char[l]; //System.arraycopy(c, 0, ct, 0, l);// 保持其他元素位置不变 allCombString(c, s + 1); moveBack(c, i, s); //既然改变了位置,那就再改回来 } } } 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 moveBack(char[] c, int id, int s) { if (id > s && id < c.length) { char temp = c[s]; for (int i = s; i < id; i++) { c[i] = c[i+1]; } c[id] = temp; //println(c); //t++; } } public static void println(char[] c) { System.out.println(new String(c)); } } */ /*public class ListALL { public static int t;//组合个数 public static void main(String[] args) { String str = "112"; char[] c = str.toCharArray(); System.out.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;is&&ids;i--){ c[i] = c[i-1]; } c[s] = temp; println(c); t++; } } public static void println(char[] c){ System.out.println(new String(c)); } } */ /* 设计思路: 1、n个字符,顺序选取其中第1个; 2、在剩下的n-1个字符中,再选取其中的第1个; 3、若剩余的字符只剩下2个,则这两个字符交换位置;若不是,则继续第2步。 4、这是一个典型的递归,无论有多少个字符,到最后只需交换最后两个字符即可。 5、为了能按顺序选取字符(因为递归之后会影响字符的顺序,如:“abcd”经过第一轮递归之后变成“adbc”, 这时再执行第2步的话,取到的字符是“d”,而不是“b”),所以这里使用了数组拷贝,for循环不受递归的影响。 (这个问题想了老半天,暂时只能用这种方法,即使效率比较低)。 6、组合的个数是字符个数的阶层,如“abc”,组合个数为3!=6 */ /*//未解决重复问题 import java.util.Arrays; public class ListALL { static String[] listMe = {"2","2","3"}; static int listMeLen = listMe.length; public static void list(String insert,String[] inserted) { int insertedLen = inserted.length, tempInsertedLen = insertedLen + 1; String tempInserted[] = new String[tempInsertedLen]; for (int i = 0; i < tempInsertedLen; i++) { System.arraycopy(inserted,0,tempInserted,0,i); tempInserted[i] = insert; System.arraycopy(inserted,i,tempInserted,i+1,tempInsertedLen - i - 1); if (tempInsertedLen == listMeLen) System.out.println(Arrays.asList(tempInserted)); else list(listMe[tempInsertedLen],tempInserted); } } public static void main(String[] args) { list(listMe[1],new String[]{listMe[0]}); } }*/ /* import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class ListAll { //使用createList方法,填充参数列表传递过来的List,默认是Integer,一般是这个类型,你可以修改别的类型 public void createList(int n,List list){ if(n==0){ n=3; } for(int i=1;i<=n;i++){ list.add(i); } } *//**添加了一个参数在递归的方法中,用来记录原list的长度,使得每次的排列字符串输出可以完全记载到 * 第二个参数prefix,不使用2,而是使用length来判断是否加最后一个元素入prefix,从而结束输出 * printAll是输出全排列的递归调用方法,list是传入的list,用LinkedList实现, * 而prefix用于转载以及输出的数据 * length用于记载初始list的长度,用于判断程序结束。 *//* public void printAll(List candidate, String prefix,int length){ if(prefix.length()==length) System.out.println(prefix); for (int i = 0; i < candidate.size(); i++) { List temp = new LinkedList(candidate); printAll(temp, prefix + temp.remove(i),length); } } *//** * 测试代码 *//* public static void main(String[] args) { ArrayList list=new ArrayList(); ListAllPrint lap=new ListAllPrint(); lap.createList(5, list); lap.printAll(list,"",list.size()); } } */ /*public 递归方法(参数列表){ if(列表的元素只有两个){ 输出:“元素一元素二” 输出:“元素二元素一” }else{ //此时元素有两个以上,这时候要使用递归 递归方法(参数列表)//使用递归方法将元素细分 } }*/
本文档为【java 字符串全排列大全 &#40;已解决重复问题&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_072127
暂无简介~
格式:doc
大小:30KB
软件:Word
页数:0
分类:企业经营
上传时间:2018-02-12
浏览量:17