【題目描述】
Given two integersnandk, return all possible combinations of?k?numbers out of 1 ...n.
組給出兩個整數n和k,返回從1......n中選出的k個數的組合。
【題目鏈接】
www.lintcode.com/en/problem/combinations/
【題目解析】
先枚舉第一個數,然后枚舉一個比第一個數大的數作為第二個數,……,最后枚舉一個比前k-1個數都大的數作為第k個數,這樣就能夠枚舉所有k個數的組合方案,又能夠保證不出現重復的情況。
但是由于k是輸入的,所以我們需要采取回溯的形式,即以遞歸嵌套的方式來動態的進行枚舉。
然后就只需要在可以的范圍內枚舉下一個數,添加到current的末尾,這個數需要比last大,并且比n-k+1要小(確保之后的數還有空間)。
在枚舉好后,就只需要在current之后添加該數,然后利用回溯的方法,遞歸的去枚舉下一個數。
特別的,當k==0時,說明已經完成了枚舉,只需要將current添加到ans末尾即可。
【參考答案】