[FollowUp] Combinations 组合项

简介:

这是 Combinations 组合项 的延伸,在这里,我们允许不同的顺序出现,那么新的题目要求如下:

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:

[
[1,2],
[1,3],
[1,4],
[2,1],
[2,3],
[2,4],
[3,1],
[3,2],
[3,4],
[4,1],
[4,2],
[4,3],
]

这题的解法其实只是在原题 Combinations 组合项 的基础上做很小的改动即可,这里我们为了避免重复项,引入了visited数字来标记某个数组是否出现过,然后就是递归中的循环不是从level开始,改为每次从0开始,这样就能把所有不同的排列方式都找出来,代码如下:

class Solution {
public:
    vector<vector<int> > combine(int n, int k) {
        vector<vector<int> > res;
        vector<int> out;
        vector<int> visited(n, 0);
        combineDFS(n, k, 0, visited, out, res);
        return res;
    }
    void combineDFS(int n, int k, int level, vector<int> &visited, vector<int> &out, vector<vector<int> > &res) {
        if (out.size() == k) res.push_back(out);
        else {
            for (int i = 0; i < n; ++i) {
                if (visited[i] == 0) {
                    visited[i] = 1;
                    out.push_back(i + 1);
                    combineDFS(n, k, level + 1, visited, out, res);
                    out.pop_back();
                    visited[i] = 0;
                }
            }
        }
    }
};

本文转自博客园Grandyang的博客,原文链接:组合项[FollowUp] Combinations ,如需转载请自行联系原博主。

相关文章
|
Java 容器
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
|
存储 分布式计算 NoSQL
【赵渝强老师】大数据技术的理论基础
本文介绍了大数据平台的核心思想,包括Google的三篇重要论文:Google文件系统(GFS)、MapReduce分布式计算模型和BigTable大表。这些论文奠定了大数据生态圈的技术基础,进而发展出了Hadoop、Spark和Flink等生态系统。文章详细解释了GFS的架构、MapReduce的计算过程以及BigTable的思想和HBase的实现。
542 0
|
数据可视化 安全 测试技术
部署流水线原则与工具设计
部署流水线原则与工具设计
201 1
|
安全 API Python
在python中的基本同步原语
【6月更文挑战第23天】本文介绍了Python `asyncio`库中的同步原语,包括Lock、Event、Condition、Semaphore和BoundedSemaphore,以及Queue和PriorityQueue。`asyncio` API设计与`threading`模块相似,
305 7
在python中的基本同步原语
|
Docker 容器
docker build -t和docker build -f区别
参数用于指定要使用的Dockerfile的路径,允许你在不同的位置使用不同的Dockerfile来构建镜像。
317 0
|
自然语言处理 Java 开发者
简单了解下Spring中的各种Aware接口实现依赖注入
【8月更文挑战第21天】在Spring框架中,Aware接口系列是一种特殊的机制,它允许Bean在初始化过程中获取到Spring容器或容器中的特定资源,从而实现了更加灵活和强大的依赖注入方式。本文将围绕Spring中的各种Aware接口,详细探讨它们如何帮助开发者在工作和学习中更好地实现依赖注入。
405 0
|
安全 网络安全 Windows
别人ping不通我的ip解决方法
别人ping不通我的ip解决方法
577 0
|
人工智能 数据安全/隐私保护
图灵测试
图灵测试 “【5月更文挑战第20天】”
2338 1
|
JSON NoSQL Java
SpringDataRedis 操作 Redis,并指定数据序列化器
SpringDataRedis 操作 Redis,并指定数据序列化器
385 1
|
算法 搜索推荐 Java
太实用了!阿里内部强推的超全Java算法学习指南,已被彻底征服
算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。