一、全排列
1 //java全排列,r参数可控组合 2 void prim(String s, LinkedList<Character> list, int r, int x){ 3 if(s.length() == r) 4 System.out.println(s); 5 else{ 6 int len = list.size(); 7 for(int i = x; i < len; i++){ 8 LinkedList<Character> t = new LinkedList<Character>(list); 9 char re = t.remove(i); 10 prim(s+re+"", t, r, i); 11 //当x位置用0代替时,组合可重复,否则反之 12 t = null; 13 } 14 } 15 }
二、组合
//从a中取k个 的 组合(标记法) void dfs(int[] a, int[] take, boolean[] f, int num, int k, int x){ if(num == k){ for(int i = 0; i < k; i++) System.out.print((char)(take[i]+'A')); System.out.print("\n"); return; } for(int i = x; i < a.length; i++){ if(!f[i]){ f[i] = true; take[num] = a[i]; dfs(a, take, f, num+1, k, i); //当i位置用0代替时,组合可重复,否则反之 f[i] = false; } } }
三、快速排序
1 void Qsort(int list[], int left, int right) 2 { 3 if(left < right) 4 { 5 int t = list[l]; 6 int i = left, j = right; 7 while(i != j) 8 { 9 while(i<j && list[j]>=t) 10 j--; 11 Swap(list[i], list[j]); //交换两数 12 while(i<j && list[i]<=t) 13 i++; 14 Swap(list[i], list[j]); 15 } 16 Qsort(list, left, i); 17 Qsort(list, i+1, right); 18 } 19 else 20 return ; 21 }
四、最大公约数和最小公倍数
1 int gcd(int a, int b)///辗转相除法 2 { 3 int mod=a % b; 4 while (mod!=0) 5 { 6 a = b; 7 b = mod; 8 mod = a % b; 9 } 10 return b; 11 } 12 int gcd(int a, int b)//更相减损法 13 { 14 int i = a, j = b; 15 while(i != j) 16 { 17 if(i > j) 18 i -= j; 19 else 20 j -= i; 21 } 22 return i; 23 } 24 公倍数 :a*b/gcd(a, b);