利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复

来源:互联网 发布:qq管家 默认软件 编辑:程序博客网 时间:2024/05/18 02:57
/** * 利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复  * 思路: * 递归, * 每次取某个位置的字符(为了避免重复元素的影响,只取首次索引对应的字符),从剩余字符中有序取出下一个字符... * 当全部取出时,作为一个排列,输出。 */package t;import java.util.*;import java.util.TreeSet;public class Test7_3 {static int count = 0;//排列种类public static void main(String[] args) throws Exception{// TODO Auto-generated method stubString s ="12234";Pailie(s,"");}static void Pailie(String s, String p){//System.out.println("s: "+s);//System.out.println("p: "+p);if(s.length()<1){count++;//System.out.println("count: "+ count);if("" != p)System.out.println(p);}else{int index[] = new int[s.length()];for(int i=0; i<s.length(); i++){//该字符首次索引index[i] = s.indexOf(s.charAt(i));//Returns the index within this string of the first occurrence of the specified character}for(int i=0; i<s.length(); i++){if(i==index[i]){//保证相同字符中的第一次调用Pailie(s.substring(1),p+s.substring(0,1));}s = s.substring(1) + s.substring(0,1);//循环移位,使每次都是在起始位置选择第一个Pailie(s.substring(1),p+s.substring(0,1));----bug:原来的s未释放}}}}

原创粉丝点击