3月7日代码随想录组合及优化

77.组合

77. 组合 - 力扣(LeetCode)

给定两个整数 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

思路

若是使用for循环嵌套组合1到n中的数,若k取大一点就会有非常多的嵌套for要写,明显是不合适的,所以这里引入了回溯的思想,直观的想法是画出递归树,这里引用了力扣大佬画的图

 这里我们需要使用一个表示路径的栈path去记录已选择的数。

class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res=new ArrayList<>();//答案if(k<=0||n<k){return res;}Deque<Integer> path=new ArrayDeque<>();dfs(n,k,1,path,res);//题目要求从1开始return res;}private void dfs(int n,int k,int begin,Deque<Integer> path,List<List<Integer>> res){if(path.size()==k){//如果path长度已经=要寻找的数个数,说明找到一组答案res.add(new ArrayList<>(path));return;}for(int i=begin;i<=n-(k-path.size())+1;i++){//此处是一个优化思想,如果n=7,k=4,那么从5开始搜索已经没有意义了,所以搜索起点有上界。path.addLast(i);//将当前节点记录进pathdfs(n,k,i+1,path,res);//将path传入下一次递归从i+1开始寻找path.removeLast();//将该节点删除,代表了回溯的操作。}}}

思路2.按照每一个数选与不选递归。

public class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<>();if (k <= 0 || n < k) {return res;}// 为了防止底层动态数组扩容,初始化的时候传入最大长度Deque<Integer> path = new ArrayDeque<>(k);dfs(1, n, k, path, res);return res;}private void dfs(int begin, int n, int k, Deque<Integer> path, List<List<Integer>> res) {if (k == 0) {res.add(new ArrayList<>(path));return;}if (begin > n - k + 1) {return;}// 不选当前考虑的数 begin,直接递归到下一层dfs(begin + 1, n, k, path, res);// 不选当前考虑的数 begin,递归到下一层的时候 k - 1,这里 k 表示还需要选多少个数path.addLast(begin);dfs(begin + 1, n, k - 1, path, res);// 深度优先遍历有回头的过程,因此需要撤销选择path.removeLast();}
}

总结

回溯法第一题卡了好几天,需要加强复习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【手游联运平台搭建】游戏平台的作用

随着科技的不断发展&#xff0c;游戏行业也在不断壮大&#xff0c;而游戏平台作为连接玩家与游戏的桥梁&#xff0c;发挥着越来越重要的作用。游戏平台不仅为玩家提供了便捷的游戏体验&#xff0c;还为游戏开发者提供了广阔的市场和推广渠道。本文将从多个方面探讨游戏平台的作…

复习C++

统计每个月兔子的总数 #include<bits/stdc.h> using namespace std; int n,sum0; void f(int); int main() {int a[1000];cin>>n;a[1]1;a[2]2;for(int i3;i<1000;i){a[i]a[i-1]a[i-2];}cout<<a[n];return 0; } void f(int n){} 猴子吃桃子 #include<…

slice()函数的用法

1、slice没有参数&#xff0c;拷贝一个数组&#xff0c;跟原数组无关联 var arr1 [a, b, c]; var arr2 arr1.slice(); console.log(arr2,arr1arr2); 输出&#xff1a;[a, b, c] false 2、slice(start,end)有参数 从start下标开始(包括start)&#xff0c;到end&#xff…

前端算法之选择排序

2、选择排序&#xff08;Selection Sort&#xff09; 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理&#xff1a;首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排…

el-table 表格多选, 批量删除功能

一、基础的多选el-table ElementUI 提供了多选行table&#xff0c;同时若依框架也提供了成熟的多选表格。 1.table基础结构 需要绑定selection-change方法 <el-tablev-loading"loading"stripe:data"productList"selection-change"handleSelect…

node的安装与介绍

安装 下载地址 node官网首页就会有两个安装选择&#xff0c;会根据当前电脑的系统自动显示对应的安装包&#xff0c;一个长期维护版&#xff08;LTS&#xff09;,一个是尝鲜版&#xff0c;记住选择LTS版本 安装指定版本下载截图 安装过程截图&#xff08;非常简单&#xff…

计算机设计大赛 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

C++ 路径问题

目录 例1 例2 例3 例4 例5 例6 例1 62. 不同路径 1.初始化 2.当前位置的条数&#xff0c;就是上面位置的条数 &#xff0c;加上其左边位置的条数&#xff0c;dp[i][j] dp[i - 1][j] dp[i][j - 1]; 参考代码 class Solution { public:int uniquePaths(int m, int n) …

关于前端的一些

前端侧重于人机交互和用户体验&#xff0c;后端侧重于业务逻辑和大规模数据处理。理论上&#xff0c;面向用户的产品里&#xff0c;所有问题&#xff08;包括产品、设计、后端、甚至看不见的问题&#xff09;的表现形式&#xff0c;都会暴露在前端&#xff0c;而只有部分问题&a…

个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商

自华为官方宣布HarmonyOS NEXT鸿蒙星河版开放申请以来&#xff0c;越来越多的头部APP宣布启动鸿蒙原生开发&#xff0c;鸿蒙生态也随之进入全新发展的第二阶段。 作为华为鸿蒙生态的重要合作伙伴&#xff0c;个推一直积极参与鸿蒙生态建设。为帮助用户在HarmonyOS NEXT上持续享…

力扣刷题Days11第二题--141. 环形链表(js)

目录 1,题目 2&#xff0c;代码 2.1快慢指针 2.2&#xff0c;哈希表 3&#xff0c;学习与总结 3.1自己尝试写快慢指针 反思 1,题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&…

代码随想录day34:动态规划part2

文章目录 day34&#xff1a;动态规划part262.不同路径63.不同路径 II day34&#xff1a;动态规划part2 62.不同路径 class Solution {public int uniquePaths(int m, int n) {// dp[i][j]&#xff1a;到达(i, j)的路径数量int[][] dp new int[m][n];for (int j 0; j < n…

PostgreSQL安装教程

系统环境 下载压缩包 下载压缩包 解压压缩包 查看解压文件 编译安装 编译 安装 用户权限和环境变量设置 创建用户 创建数据目录和日志目录 设置权限 设置环境变量 初始化数据库 数据库访问控制配置文件 postgresql.conf pg_hba.conf PostgreSQL启动与关闭 手…

Web前端_html5+css3

C/S架构与B/S架构 C/S架构&#xff1a;客户端与服务器&#xff08;需要安装、偶尔更新、不跨平台、安全性要求高&#xff09; B/S架构&#xff1a;浏览器与服务器 HTML认知 注释 在VS Code中键入ctrl / 标签组成和关系 组成&#xff1a;①双标签 ②单标签 关系&#xff…

Docker:部署微服务集群

1. 部署微服务集群 实现思路&#xff1a; ① 查看课前资料提供的cloud-demo文件夹&#xff0c;里面已经编写好了docker-compose文件 ② 修改自己的cloud-demo项目&#xff0c;将数据库、nacos地址都命名为docker-compose中的服务名 ③ 使用maven打包工具&#xff0c;将项目…

Effective C++ 学习笔记 条款17 以独立语句将newed对象置入智能指针

假设我们有个函数用来揭示处理程序的优先权&#xff0c;另一个函数用来在某动态分配所得的Widget上进行某些带有优先权的处理&#xff1a; int priority();void processWidget(std::st1::shared_ptr<Widget> pw, int priority);由于谨记“以对象管理资源”&#xff08;条…

nginx读写锁的实现逻辑

我们一般认为nginx是一个多进程单线程的应用服务&#xff0c;虽然nginx在一个worker进程内是没有数据竞争问题的&#xff08;因为是单线程&#xff09;&#xff0c;但是不免nginx在多个进程间还有一些需要共享的数据&#xff0c;譬如ngx_http_upstream_zone_module模块将peers数…

Pytorch入门实战 P1-实现手写数字识别

目录 一、前期准备&#xff08;环境数据&#xff09; 1、首先查看我们电脑的配置&#xff1b; 2、使用datasets导入MNIST数据集 3、使用dataloader加载数据集 4、数据可视化 二、构建简单的CNN网络 三、训练模型 1、设置超参数 2、编写训练函数 3、编写测试函数 4、…

子事务的应用

子事务的应用 1. 为什么要使用子事务&#xff1f; 为了防止接口执行失败时&#xff0c;导致事务回滚&#xff0c;接口日志记录不到日志表里面&#xff0c;因而将记录日志表的方法写成子事务的方法。 2. 怎么使用子事务&#xff1f; 在方法名后面加上“_RequiresNew”&#xff…

文物藏品信息管理系统的优势

本系统支持一普标准所有管理信息&#xff0c;包括保管信息、基本情况、鉴定信息、考古发掘信息、来源信息、流传经历、损坏记录、移动记录、修复记录、展览信息、著录信息、收藏单位信息等的管理和维护。 能够实现对藏品信息进行动态管理&#xff0c;提供藏品信息管理指标的维护…