排列:
public class Permutation<T> {
public void permutation(T[] arr, int m, int n){
if (m == n){
System.out.println(Arrays.toString(arr));
}
for(int i = m; i <= n ; i++){
swap(arr,i,m);
permutation(arr,m+1,n);
swap(arr,i,m);
}
}
public void swap(T[] arr, int m, int n){
T t = arr[m];
arr[m] = arr[n];
arr[n] = t;
}
}
组合:
public class Combine<T> {
public void combine(T[] arr, int m, int n, StringBuilder sb){
if(n == 0){
System.out.println(sb.toString());
return;
}
for(int i = m; i < arr.length; i++){
sb.append(arr[i]);
combine(arr, i+1, n-1, sb);
sb.deleteCharAt(sb.length()-1);
}
}
}
测试:
public class Test {
public static void main(String[] args) {
Character[] arr = {'a','b','c','d','e'};
Combine<Character> combine = new Combine<>();
System.out.println("3个字符的组合:");
combine.combine(arr,0,3,new StringBuilder());
Character[] arrays = {'a','b','c'};
System.out.println("排列:");
Permutation<Character> permutation = new Permutation<>();
permutation.permutation(arrays,0,arr.length-1);
}
}
