[size=large]用递归的方法生成一列数的所有排列组合
public class Main {
public static void main(String[] args) {
Integer[] a = {1, 2, 3, 4};
perm(a, 0, 3);
}
public static void perm(Object[] list, int k, int m) {
if(k==m) {
for(int i=0; i<=m; i++)
System.out.print(list[i]);
System.out.println();
}
else
for(int i=k; i<=m; i++) {
swap(list, k, i);
perm(list, k+1, m);
swap(list, k, i);
}
}
public static void swap(Object[] list, int k, int m) {
Object temp;
temp = list[k];
list[k] = list[m];
list[m] = temp;
}
}
void swap(int* list , int k, int m) {
int temp;
temp = list[k];
list[k] = list[m];
list[m] = temp;
}
void perm(int list[], int k, int m) {
if(k==m) {
for(int i=0; i<=m; i++) {
cout<<list[i];
}
cout<<endl;
}
else {
for(int i=k; i<=m; i++) {
swap(list, k, i);
perm(list , k+1, m);
swap(list, k, i);
}
}
}
[/size]
分享到:
相关推荐
### 华为OD机试C卷 - 数字排列(多语言实现) #### 题目背景 本题目属于华为OD机试中的一道经典题目,旨在考察应聘者对递归算法的理解及其应用能力,同时也涉及到了字符串处理和数据结构的应用。 #### 题目概述 ...
在生成排列的过程中,我们使用索引 `index` 来定位要判断的数,然后根据箭头方向和元素值来决定是否移动和交换元素。最后,我们输出生成的排列并改变箭头方向。 Johnson-Trotter 算法是一种高效的生成排列算法,...
随机生成10000数字,进行快速排序,并输出排序后的数组,及耗时
1. 初始化:设置一个空的排列数组,以及两个指针,一个指向未使用过的最小元素(初始为1),另一个指向排列数组的末尾。 2. 当有元素未被加入到排列中时,执行以下操作: a. 如果当前指针指向的是最小元素(即未...
在C语言、C++和Java这三种不同的编程语言中实现杨辉三角形的打印,可以展示不同语言的语法特性以及编程思维。 首先,我们来看C语言的实现,文件名为"yang.c"。C语言以其简洁和高效著称,它的实现通常会利用二维数组...
在C++和Java中,这些算法的实现会展示如何利用指针(C++)和对象引用(Java)来操作数组元素。 2. **搜索算法**:如二分查找、线性查找等,用于在数据集合中找到目标值。二分查找通常在有序数组中应用,而线性查找...
在实际编程时,可以使用如Python的`PIL`(Pillow)库或C++的`OpenCV`库等图像处理库,它们提供了便利的接口来处理这些步骤。如果你需要处理更复杂的RGB数据处理或图像处理任务,如颜色空间转换、滤波、边缘检测等,...
在本例中,我们将讨论如何使用递归方法实现全排列,以Java、C#、C++等主流编程语言为例。 全排列算法的核心思想是通过递归地交换元素来生成所有可能的序列。假设我们有一个包含n个不同元素的数组,全排列的数量是n...
- 在递归过程中加入限制条件,避免生成不符合规则的排列。 - 注意处理重复数字的情况,防止出现重复排列。 #### 程序30: 二分查找 - **目标**: 实现二分查找算法,判断一个整数是否存在于给定的整数数组中。 - **...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
14. 对于回溯问题,包括子集、排列、组合求和、回文分割等,可以采用一般的Java解法。 15. 在处理包含重复元素的问题时,如Subsets II,需要考虑如何避免生成重复的子集。 16. 动态规划(DP)和深度优先搜索(DFS...
在C++中编写图论算法的优势在于,C++是一种静态类型、编译型语言,其运行速度通常比解释型语言如Java或脚本语言Matlab快。此外,C++提供了丰富的模板库和面向对象特性,可以灵活且高效地处理图形数据结构。 1. **图...
【程序11】组合数的生成,使用排列组合的思想,可以使用三层循环,分别对百位、十位、个位进行填充,避免重复。 【程序12】奖金提成计算,需要根据不同的利润区间设置不同的提成比例,可以使用if...else结构或者...
6. **高性能**:随着JIT编译器的优化,Java程序的执行速度接近于C++。 7. **多线程**:内置了对多线程的支持,可以轻松地开发并发应用程序。 8. **动态性**:支持运行时动态加载类。 **四、Java工作原理** Java...
JDK包含了Java编译器、运行时环境和其他必要的工具,如javac(用于编译源代码)、java(用于执行编译后的字节码)以及javadoc(用于生成文档)。安装完毕后,设置环境变量(如PATH和CLASSPATH),确保可以在命令行下...
2. **编写逆波兰式生成程序**:使用高级语言(如C++或Java)编写一个程序,该程序能接收用户从键盘输入的算术表达式,并将其转换为逆波兰式。 #### 实验细节解析 **1. 理解逆波兰式** 逆波兰式是一种表达算术...
与C/C++不同的是,Java还允许一些特殊字符作为标识符的一部分。 - **Unicode支持**:Java支持Unicode字符集,这意味着可以使用非英文字符作为标识符的一部分。 - **关键字避免**:Java有一些预定义的关键字,例如`...
- **目的**:旨在解决C++语言中存在的问题,如内存管理复杂、安全性低等问题。 - **创始人**:James Gosling被誉为“Java之父”。 **1.2 Java的特点** - **平台无关性**:Java代码可以在任何支持Java的平台上运行...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
5. Java关键字:不是Java关键字的是(D)`sizeof`,它在C/C++中常见,但在Java中不存在。 6. 注释方式:在Java程序中,表示单行注释的符号是(C)`//`,它用于单行文本注解。 7. 构造函数:构造函数在Java中是类的...