func combinationSum3(k int, n int) (ans [][]int) { stack := make([]int, 0) for i, sum, l := 1, 0, 0; ; l = len(stack) { // If need to backtrack if l == k || 10-i+l < k { // Cut the branches or MLE if l == 0 { // No previous number to pop break } else if l == k && sum == n { ans = append(ans, make([]int, k)) copy(ans[len(ans)-1], stack) } sum -= stack[l-1] i = stack[l-1] + 1 stack = stack[:l-1] } else { stack = append(stack, i) sum += i i++ } } return ans }