【程序员面试攻略】一书中的第七章代码:
public class Ch7{
/*
* factorial: recursively
*/
public int fac(int n)
{
if(n == 1) return 1;
else
return n*fac(n-1);
}
/*
* factorial: iteratively
*/
public int fac_iterate(int n){
int result = 1;
for(int i = n; i > 0; --i){
result *= i;
}
return result;
}
/*
* calculate the permutation of a string
* eg: abc will get: abc, acb, bac,bca,cab,cba.
*/
public void permute(String str){
int length = str.length();
boolean[] used = new boolean[length];
StringBuffer out = new StringBuffer();
char[] in = str.toCharArray();
doPermute(in, out, used, length, 0);
}
private void doPermute(char[] in, StringBuffer out, boolean[] used, int length, int level){
if(length == level){
System.out.println(out.toString());
}
for(int i = 0; i < length; ++i){
if(used[i]) continue;
out.append(in[i]);
used[i] = true;
doPermute(in, out, used, length, level+1);
used[i] = false;
out.setLength(out.length() - 1);
}
}
/*
* combination of a string
* eg.: abc will get: a,ab,abc,ac,b,bc,c
*/
public void combine(String str){
int length = str.length();
char[] instr = str.toCharArray();
StringBuffer outstr = new StringBuffer();
doCombine(instr, outstr, length, 0, 0);
}
private void doCombine(char[] instr, StringBuffer outstr, int length, int level, int start){
for(int i = start; i < length; ++i){
outstr.append(instr[i]);
System.out.println(outstr.toString());
if(i < length-1){
doCombine(instr, outstr, length, level+1, i+1);
}
outstr.setLength(outstr.length() -1);
}
}
}