/**
* 利用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 stub
String 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未释放
}
}
}
}
利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复
最新推荐文章于 2021-07-16 20:44:06 发布