首页 > 其他分享 >leet code 77. 组合

leet code 77. 组合

时间:2023-11-16 18:03:25浏览次数:36  
标签:leet code idx int List private 77 ans local

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

题目解析

  • 组合问题,从数字1到数字n 每一个数字都可以作为根
  • 很显然数字还不能重复使用

code 1

class Solution {

    private List<List<Integer>> ans;

    // 标记被使用过的数字
    private boolean[] used;

    private int n;

    private int k;

    public List<List<Integer>> combine(int n, int k) {
        // 初始化结果集  和  标记集
        ans = new ArrayList<>();
        used = new boolean[n + 1];

        // 初始化全局变量
        this.n = n;
        this.k = k;

        List<Integer> local = new ArrayList<>();

        // 1 :表示从 1 开始选择
        // local :保存选择路径上的元素
        dfs(local, 1);


        return ans;
    }

    private void dfs(List<Integer> local, int idx) {
        // 如果剩下的数全部都选择不够 k 个数了直接返回
        if(local.size() + (n - idx + 1) < k) {
            return;
        }
        // 足够 k 个数了
        if(local.size() == k) {
            // 加入到结果集合中
            ans.add(new ArrayList<>(local));
            return;
        }
        // 相当于遍历有序数组.
        for(int i = idx;i <= n;i++) {
            if(used[i]){ 
                continue;
            }
            // 选择当前元素
            local.add(i);
            // 标记
            used[i] = true;

            // 深度搜索
            dfs(local, i + 1);

            // 取消标记
            used[i] = false;
            // 撤销选择
            local.remove(local.size() - 1);
        }
    }

}

code 2

class Solution {

    private List<List<Integer>> ans;

    private int n;

    private int k;

    public List<List<Integer>> combine(int n, int k) {
        // 初始化结果集  和  标记集
        ans = new ArrayList<>();

        // 初始化全局变量
        this.n = n;
        this.k = k;

        List<Integer> local = new ArrayList<>();

        // 1 :表示从 1 开始选择
        // local :保存选择路径上的元素
        dfs(local, 1);
    

        return ans;
    }

    private void dfs(List<Integer> local, int idx) {
        // 如果剩下的数全部都选择不够 k 个数了直接返回
        if(local.size() + (n - idx + 1) < k) {
            return;
        }
        // 足够 k 个数了
        if(local.size() == k) {
            // 加入到结果集合中
            ans.add(new ArrayList<>(local));
            return;
        }

        // 对于每一个元素面临 2 种情况,选 or 不选
        
        // 不选择当前元素
        dfs(local, idx + 1);

        // 选择当前元素
        local.add(idx);
        dfs(local, idx + 1);
        local.remove(local.size() - 1);
    }

}

标签:leet,code,idx,int,List,private,77,ans,local
From: https://blog.51cto.com/u_16079703/8429958

相关文章

  • P7701 [CCC2014] 提前交卷 题解
    目录DescriptionSolutionCodeDescription在一个教室里有\(n\)排座位,每排有\(6\)个,从左至右标号分别为ABCDEF,其中C和D中有过道,通往教室前端和后端的两个房间,每个房间最开始没有人,每个座位上开始都有人。有\(m\)个不同的学生会依次提前交卷,先从这一排走到过道上,在从......
  • VSCode------设置自动补全函数的括号
    一:VSCode设置自动补全函数的括号操作步骤1.1 寻找setting.json配置文件    Ctrl+Shift+P (Mac:command+Shift+P) 1.2编辑并保存配置内容 "typescript.suggest.completeFunctionCalls": true,  "javascript.suggest.completeFunctionCalls": ......
  • Visual Studio Code (VS Code) 中 常用的快捷键
    在VisualStudioCode(VSCode)中,有许多常用的快捷键可以提高开发效率。以下是一些常用的快捷键:1.编辑器相关操作:-`Ctrl+P`:快速打开文件。-`Ctrl+Shift+N`:打开新的编辑器窗口。-`Ctrl+S`:保存当前文件。-`Ctrl+F`:在当前文件中进行文本查找。-`C......
  • error DatabaseException(disk I/O error (code 1802)) sql 'PRAGMA user_version' ar
    问题描述errorDatabaseException(diskI/Oerror(code1802))sql'PRAGMAuser_version'args[]duringopen,c问题分析错误消息"DatabaseException(diskI/Oerror(code1802))"表示在尝试打开SQLite数据库时发生了磁盘I/O错误。这可能有几种原因:数据库文件路径......
  • vs code开发微信小程序配置
    安装小程序开发助手安装vscode-wechat安装wxml安装wechat-snippet安装vscodewxml安装vscodeweappapi......
  • Codewhisperer 使用评价
    最近亚⻢逊推出了一款基于机器学习的AI编程助手AmazonCodeWhisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。AmazonCodeWhisperer与GitHubCopilot类似,主要的功能有:代码补全注释和文档补全代码安全问题的辅助定位亚马逊云科技开发......
  • Vscode 更新之后连不上服务器的解决方案
    参考这里有一点不一样:不需要删除.vscodeserver<参考的博文:原文:删掉整个.vscodeserver目录,然后重新生成(重新连接,失败后就重新生成了)>只需要删除.vscodeserver\bin\下的文件夹,他们就是不同版本的server然后新建那个$COMMIT_ID的文件夹就可以了,这一步参考上文。再然后再链接就......
  • gin-vue-admin 接口错误Error: Request failed with status code 500
    本地运行以后登录出现:控制台检查发现是请求getMenu出现500错误,并且后端出现"Error1071(42000):Specifiedkeywastoolong;maxkeylengthis1000bytes"错误,那就是数据库casbin_rule的表引擎不是InnoDB,更改成InnoDB即可。ALTERTABLEcasbin_ruleENGINE=InnoDB;......
  • blob:http Status Code: 206 Partial Content 视频去水印
       从视频中删除水印-免费擦除徽标和日期https://online-video-cutter.com/cn/remove-logo#google_vignetteStatusCode:206PartialContentblob:https://online-video-cutter.com/461afc6a-9e64-45ca-9276-4f9489bde7f7  视频去水印先上传再选区域  ......
  • oracle DES3 to Java code
    oracle加密createorreplacefunctiondes3_enc(inputvarchar2)returnvarchar2isi_datavarchar2(128);v_invarchar2(255);i_keyvarchar2(128);raw_inputRAW(128);key_inputRAW(128);decrypted_rawRAW(2048);i_data:=input;raw_input:=UTL_RAW.CAST_T......