0077.组合

方法一:回溯

时间复杂度 $O(n \times k)$,空间复杂度 $O(n \times k)$。

func combine(n int, k int) [][]int {
	ans := [][]int{}
	var backtrack func(values []int, started int)
	backtrack = func(values []int, started int) {
		if len(values) == k {
			ans = append(ans, append([]int{}, values...))
			return
		}
		for i := started; i <= n; i++ {
			values = append(values, i)
			backtrack(values, i+1)
			values = values[:len(values)-1]
		}
	}
	backtrack([]int{}, 1)
	return ans
}