80,490
社区成员
发帖
与我相关
我的任务
分享
,我不明白这个总数为什么这么算?
ArrayList<String> list = new ArrayList<String>();
int n = 4;
int count = Calc(list,0,n,n);
Log.e("calc=", ""+count);
/**
*
* @param i 左-右括号数量
* @param a 剩余左括号数量
* @param b 剩余右括号数量
* @return
*/
private int Calc(ArrayList<String> list,int i, int a, int b) {
if(a+b==0){
StringBuffer sb = new StringBuffer();
for(String s : list) {
sb.append(s);
}
Log.e("item", sb.toString());
return 1;// 左右括号全部用完时为一个答案
}
int num = 0;
if(a>0) {
list.add("(");
num += Calc(list,i+1, a-1, b);// 左括号只要有总是可以用
list.remove(list.size()-1);
}
if(i>0 && b>0) {
list.add(")");
num += Calc(list,i-1, a, b-1);// 右括号要有并且有未匹配的左括号时可以用
list.remove(list.size()-1);
}
return num;
}