我們:有多少個有效的括號組合?
n1
的{}
括號中的數字,n2
數量()
支架,n3
一些[]
支架,
這些括號有多少種不同的有效組合?
我想什麼:我寫在Java中的蠻力代碼(來自於以下),並計算所有可能的組合,我知道這是最壞的解決方案成爲可能,
(代碼是一般情況,其中我們可以有不同類型的括號)
任何數學方法?
注1:有效組合定義如常,例如, {{()}}
:有效,{(}){}
:無效
注2:假設我們有2對{}
,1雙()
和1對的[]
,有效組合的數量將是168和所有可能的數量(有效&無效)組合將是840
static void paranthesis_combination(char[] open , char[] close , int[] arr){
int l = 0;
for (int i = 0 ; i < arr.length ; i++)
l += arr[i];
l *= 2;
paranthesis_combination_sub(open , close , arr , new int[arr.length] , new int[arr.length], new StringBuilder(), l);
System.out.println(paran_count + " : " + valid_paran_count);
return;
}
static void paranthesis_combination_sub(char[] open , char[] close, int[] arr , int[] open_so_far , int[] close_so_far, StringBuilder strbld , int l){
if (strbld.length() == l && valid_paran(open , close , strbld)){
System.out.println(new String(strbld));
valid_paran_count++;
return;
}
for (int i = 0 ; i < open.length ; i++){
if (open_so_far[i] < arr[i]){
strbld.append(open[i]);
open_so_far[i]++;
paranthesis_combination_sub(open , close, arr , open_so_far , close_so_far, strbld , l);
open_so_far[i]--;
strbld.deleteCharAt(strbld.length() -1);
}
}
for (int i = 0 ; i < open.length ; i++){
if (close_so_far[i] < open_so_far[i]){
strbld.append(close[i]);
close_so_far[i]++;
paranthesis_combination_sub(open , close, arr , open_so_far , close_so_far, strbld , l);
close_so_far[i]--;
strbld.deleteCharAt(strbld.length() -1);
}
}
return;
}
你如何定義一個有效的組合?根據解析規則,這個問題可能有很多不同的答案。 –
現在編輯問題 –
查找加泰羅尼亞號碼。已驗證? – Joni