編寫帶有下列聲明的例程:第一個例程是個驅動程序,它調用第二個例程並顯示String str中的字符的全部排列。例如,str是"abc", 那麼輸出的串則是abc,acb,bac,bca,cab,cba

全排列在筆試面試中很熱門,由於它難度適中,既能夠考察遞歸實現,又能進一步考察非遞歸的實現,便於區分出考生的水平。因此在百度和迅雷的校園招聘以及程序員和軟件設計師的考試中都考到了,所以本文對全排列做下總結幫助你們更好的學習和理解。對本文有任何補充之處,歡迎你們指出。程序員

 

/**
* 編寫帶有下列聲明的例程:
* public void permute(String str);
private void permute(char[] str, int low, int high);
第一個例程是個驅動程序,它調用第二個例程並顯示String str中的字符的全部排列。
例如,str是"abc", 那麼輸出的串則是abc,acb,bac,bca,cab,cba,第二個例程使用遞歸。
*/
public class PermuteTest{面試

public static void main(String[] args){
permute("abc");
}

public static void permute(String str){
char[] ch = str.toCharArray();
permute(ch, 0, ch.length-1);
}學習

private static void permute(char[] str, int low, int high){
int length = str.length;
if(low == high){
String s = "";
for(int i=0;i<length;i++){
s += str[i];
}
System.out.println(s);
}
for(int i=low; i<length;i++){
swap(str, low, i);
permute(str, low+1, high);
swap(str, low, i);
}
}.net

public static void swap(char[] str, int m, int n){
char temp = str[m];
str[m] = str[n];
str[n] = temp;
}

public static int is_swap(char[] str, int m, int n){
int flag = 1;
for(int i=m;i<n;i++){
flag = 1;
if(str[i] == str[n]){
flag = 0;
break;
}
}
return flag;
}
}設計

 

 

參考: http://blog.csdn.net/vino8to24/article/details/52583526blog

相關文章
相關標籤/搜索