1 package test;
2 import java.util.LinkedList;
3
4 public class TestCombination {
5 public static void combination(char[] arr) {
6 int len = arr.length;
7 int[] used = new int[len];
8 LinkedList<Character> linkedlist = new LinkedList<Character>();
9 combination(arr, 0, linkedlist, used);
10 }
11
12 public static void combination(char[] arr, int i,
13 LinkedList<Character> linkedlist, int[] used) {
14 if (i == arr.length) {
15 for (int j = 0; j < linkedlist.size(); j++) {
16 System.out.print(linkedlist.get(j) + " ");
17 }
18 System.out.println();
19 } else {
20 for (int k = 0; k < arr.length; k++) {
21 if (used[k] == 0) {
22 used[k] = 1;
23 linkedlist.push(arr[k]);
24 combination(arr, i + 1, linkedlist, used);
25 linkedlist.pop();
26 used[k] = 0;
27 }
28 }
29 }
30 }
31 public static void combination_norepeat(String str){
32 char[] charr=str.toCharArray();
33 int [] used=new int[255];
34 int diffcharnum=0;
35 for(int i=0;i<charr.length ;i++){
36 used[charr[i]]++;
37 }
38 char[] res=new char[charr.length];
39 for(int i=0;i<255;i++){
40 if(used[i]>0){
41 diffcharnum++;
42 }
43 }
44 char[] letters=new char[diffcharnum]; //统计不同的字符
45 for(int i=0,j=0;i<255&&j<diffcharnum;i++){
46 if(used[i]>0){
47 letters[j++]=(char) i;
48 }
49 }
50 combination_norepeat(charr,0,used,res,letters);
51 }
52 public static void combination_norepeat(char [] str,int i,int [] used,char [] res,char[] letters){
53 if(i==res.length ){
54 for(int j=0;j<res.length;j++){
55 System.out.print(res[j]+" ");
56 }
57 System.out.println();
58 }else{
59 for(int k=0;k<letters.length;k++){
60 if(used[letters[k]]>0){
61 used[letters[k]]--;
62 res[i]=letters[k];
63 combination_norepeat(str,i+1,used,res,letters);
64 used[letters[k]]++;
65 }
66 }
67 }
68 }
69 public static int AddWithoutArithmetic(int num1, int num2) {
70 if (num2 == 0)
71 return num1;
72 int sum = num1 ^ num2;
73 int carry = (num1 & num2) << 1;
74 return AddWithoutArithmetic(sum, carry);
75 }
76
77 public static void main(String args[]) {
78 String str = "aabc";
79 combination_norepeat(str);
80 }
81 }