public List<List<Integer>> combine(int n, int k) { res = new ArrayList<>(); if (n <= 0 || k <= 0 || n < k) return res; // 路径 Stack<Integer> path = new Stack<>(); dfs(1, path, n, k); return res; }
privatevoiddfs(int start, Stack<Integer> path, int n, int k){ // 终止条件 if (path.size() == k) { res.add(new ArrayList<>(path)); return; } // 对当前数字以及后面数字进行遍历 for (int i = start; i <= n; i++) { // 添加数字进入path path.push(i); // 只能添加比当前数字大的数字 dfs(i + 1, path, n, k); // 退回 path.pop(); } } }