📄 choose.java
字号:
package MyNa.utils;
import java.math.BigInteger;
import java.util.*;
public class Choose extends Cache {
/*
choose(n,k)=0, if(k>n or k<0)
=1, if(n==k or k==0)
choose(n-1,k)+choose(n-1,k-1) otherwise
*/
public BigInteger biV(int n){ // big-integer value conversion
return BigInteger.valueOf(n);
}
public BigInteger choose1(int n, int k)
throws ArithmeticException{ // traditional recursive answer.
if(n<k || k<0)return biV(0);
if(n==k || k==0)return biV(1);
return choose1(n-1,k).add(choose1(n-1,k-1));
}
public BigInteger choose(int n,int k)
throws ArithmeticException{
BigInteger biN=biV(n); BigInteger biK=biV(k);
BigInteger R=(BigInteger)get(biN,biK);
if(null!=R)return R;
if(n<k || k<0)R=biV(0);
else if(n==k || k==0)R= biV(1);
else R= choose(n-1,k).add(choose(n-1,k-1));
return (BigInteger)put(biN,biK,R);
}
private static Cache instance=null; // the one and only class instance
private static int clients=0; // how many are asking us?
protected void init(){super.init();} // e.g., register, init logger
public static synchronized Cache getInstance(){
if(null==instance)instance=new Choose();
clients++;
return instance;
}
public static synchronized int freeInstance(){
if(null==instance)return 0;
clients--;
if(clients==0)close(); // all gone, and the cache with it.
return clients;
}
public static synchronized boolean close(){
clients=0;instance=null;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -