每日一题 77组合(剪枝)

题目

77

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2

输出:

[

[2,4],

[3,4],

[2,3],

[1,2],

[1,3],

[1,4],

]

示例 2:

输入:n = 1, k = 1

输出:[[1]]

提示:

1 <= n <= 20

1 <= k <= n

题解

选或不选

java 复制代码
class Solution {
    private List<Integer> path = new ArrayList<>();
    private List<List<Integer>> ans = new ArrayList<>();
    private int k;
    public List<List<Integer>> combine(int n, int k) {
        this.k = k;
        dfs(n);
        return ans;
    }
    private void dfs(int i) {
        //可以选的个数
        int d = k - path.size();
        if (d == 0) {
            ans.add(new ArrayList<>(path));
            return;
        }
        if (i > d) {
            dfs(i - 1);
        }
        path.add(i);
        dfs(i - 1);
        path.remove(path.size() - 1);
    }
}

答案视角

java 复制代码
class Solution {
    private List<Integer> path = new ArrayList<>();
    private List<List<Integer>> ans = new ArrayList<>();
    private int k;
    public List<List<Integer>> combine(int n, int k) {
        this.k = k;
        dfs(n);
        return ans;
    }
    private void dfs(int i) {
        int d = k - path.size();
        if (d == 0) {
            ans.add(new ArrayList<>(path));
            return;
        }
        for (int j = i; j >= d; j--) {
            path.add(j);
            dfs(j - 1);
            path.remove(path.size() - 1);
        }
    }
}
相关推荐
Infedium4 分钟前
优数:助力更高效的边缘计算
算法·业界资讯
阿乾之铭17 分钟前
spring MVC 拦截器
java·spring·mvc
码爸20 分钟前
flink 批量写clickhouse
java·clickhouse·flink
djgxfc23 分钟前
简单了解Maven与安装
java·maven
student.J25 分钟前
傅里叶变换
python·算法·傅里叶
中文很快乐26 分钟前
springboot结合p6spy进行SQL监控
java·数据库·sql
丶白泽26 分钟前
重修设计模式-概览
java·设计模式
小电玩27 分钟前
谈谈你对Spring的理解
java·数据库·spring
五味香31 分钟前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆31 分钟前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试