当前位置: 首页 > article >正文

LeetCode:46.全排列

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:46.全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]

这里需要注意和以前写过的那些组合问题去重方式要区分下

	public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        backtracking(nums, new HashSet<>(), new ArrayList<>(), res);
        return res;
    }

    private void backtracking(int[] nums, Set used, List<Integer> path, List<List<Integer>> res) {
        if (path.size() == nums.length) {
            res.add(new ArrayList(path));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if (used.contains(nums[i]))
                continue;
            path.add(nums[i]);
            used.add(nums[i]);
            // 注意这里是的 index 并不是i 或者 i + 1, 而是要从头重新开始,
            // 所以要传index,所以这里可以不要index这个参数直接传0
            // backtracking(nums, index, used, path, res);
            backtracking(nums, used, path, res);
            path.removeLast();
            used.remove(nums[i]);
        }
    }

这题里面因为nums不包含重复元素,所以也可以不使用used,可以直接使用path来进行判断

	public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        backtracking(nums, new ArrayList<>(), res);
        return res;
    }

    private void backtracking(int[] nums, List<Integer> path, List<List<Integer>> res) {
        if (path.size() == nums.length) {
            res.add(new ArrayList(path));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if (path.contains(nums[i]))
                continue;
            path.add(nums[i]);
            backtracking(nums, path, res);
            path.removeLast();
        }
    }

http://www.kler.cn/a/511132.html

相关文章:

  • 前端开发中的状态管理与网络请求封装
  • Dockerfile -> Docker image -> Docker container
  • 大数据时代的璀璨明珠:机器学习引领的智能应用革新与深度融合探索
  • Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
  • 【Python】随机数种子(random seed)的设置
  • npm ERR! code CERT_HAS_EXPIRED
  • doris:Kafka 导入数据
  • 异地IP属地代理业务解析:如何改变IP属地
  • 日志技术-LogBack入门程序Log配置文件日志级别
  • 满足不同场景的需求的智慧物流开源了
  • 和鲸科技受邀出席 2024(第四届)“风电领跑者”技术创新论坛
  • @Bean 控制 Spring Bean 生命周期
  • JavaScript语言的正则表达式
  • VSCODE SSH远程连接报错或无法联网安装.vscode-server
  • 深度学习篇---数据集分类
  • 【Unity3D】利用Hinge Joint 2D组件制作绳索效果
  • “深入浅出”系列之数通篇:(3)负载均衡
  • 【Linux】进程间通信IPC
  • 1.19学习记录
  • Amazon MSK 开启 Public 访问 SASL 配置的方法
  • 如何将自己本地项目开源到github上?
  • 2.6 聚焦:Word Embedding
  • 【UNION与UNION ALL的区别?】
  • 基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩
  • 用Python实现SVM搭建金融反诈模型(含调试运行)
  • C++的auto_ptr智能指针:从诞生到被弃用的历程