Lecture Notes on 4 August 2014 public class Permute { public static void printArray (char[] a) { if ((a[0] != 'A') && (a[1] != 'B') && (a[2] != 'C') && (a[3] != 'D')) { for (int i = 0; i < a.length; i++) { System.out.print (a[i] + " "); } System.out.println(); } } public static void swap (char[] a, int i, int j) { char tmp = a[i]; a[i] = a[j]; a[j] = tmp; } public static void permute (char[] a, int lo) { int hi = a.length; if (lo == hi) { printArray (a); } else { for (int i = lo; i < hi; i++) { swap (a, lo, i); permute (a, lo + 1); swap (a, i, lo); } } } public static void main (String[] args) { char[] a = {'A', 'B', 'C', 'D'}; permute (a, 0); } } import java.util.*; public class Subsets { public static void printArray (int[] a) { for (int i = 0; i < a.length; i++) { if (a[i] != -1) { System.out.print (a[i] + " "); } } System.out.println (); } public static int[] copy (int[] a) { int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) { b[i] = a[i]; } return b; } public static void subsets (int[] a, int[] b, int index) { if (index == a.length) { printArray (b); } else { int[] c = copy (b); b[index] = a[index]; subsets (a, b, index + 1); subsets (a, c, index + 1); } } public static void main (String[] args) { int[] a = {15, 9, 30, 21, 19, 3, 12, 6, 25, 27}; int[] b = new int [a.length]; Arrays.fill (b, -1); subsets (a, b, 0); } } public class Combine { public static void printArray (int[] b, int size) { for (int i = 0; i < size; i++) { System.out.print (b[i] + " "); } System.out.println (); } public static void combine (int[] a, int[] b, int aIdx, int bIdx, int size) { int range = a.length - size + 1; if (bIdx == size) { printArray (b, size); } else { while (aIdx < range + bIdx) { b[bIdx++] = a[aIdx++]; combine (a, b, aIdx, bIdx, size); bIdx--; } } } public static void main (String[] args) { int [] a = {1, 2, 3, 4, 5}; int [] b = {0, 0, 0, 0, 0}; int size = 3; combine (a, b, 0, 0, size); } }