Java实现全排列
时间:2019-08-31
本文章向大家介绍Java实现全排列,主要包括Java实现全排列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
例如:将 数组 { 1,2,3}进行全排列
首先,我们需要知道当只有一个元素进行全排列的时候,全排列就等于它本身。
这个数组的全排列就是需要将 每个元素放到数组首部,然后将剩下的元素进行全排列,依照此思路我们可以用递归很快的写出代码。
如果需要全排列按照字典序输出的话,只需要将需要全排列的数组先进行排序,然后再求全排列就好。
可能本人的描述理解起来有点困难,整体思想就是将这个数组里面的每个元素都放在第一位一次,将剩下的元素进行全排列,层层递归,直至只有一个元素为止。
这里推荐一个B站UP主:“正月点灯笼” 。他的算法视频大多都通俗易懂,在这里再次感谢!!!
package indi.temperature.permutation;
/**
* @auther : Temperature
* @date : 2019/8/31
* @description:
*/
public class Practice_Perum {
public void pringArray(int [] arr,int n){
// 打印数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
public void swap(int [] arr,int i,int j){
// 交换函数
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 对数组arr进行全排列
public void perum(int [] arr,int p,int q ){
// for循环将数组中所有的元素和第一个元素进行交换。然后进行全排列。
// 递归结束条件
if(p == q){
// 一次递归结束。将整个数组打印出来
pringArray( arr,q+1);
}
for(int i =p ;i <= q;i++){
swap(arr,i,p);
// 把剩下的元素都做全排列。
perum(arr,p+1,q);
// 然后再交换回去,数组还原,保证下一次不会有重复交换。
swap(arr,i,p);
}
}
public static void main(String[] args) {
int arr[] ={1,2,3};
Practice_Perum practice_perum = new Practice_Perum();
practice_perum.perum(arr,0,arr.length-1);
}
}
原文地址:https://www.cnblogs.com/songjinzhao/p/11440806.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 每天一杯力扣快乐水
- Typescript的tsconfig.json
- python和R语言计算蛋白质内部氨基酸相互作用
- 超文本传输协议 - 白话篇
- 为什么你的简历没人看?7份案例分析
- 浅析动态切换数据源的原理(接上篇)
- SpringBoot源码解析(十二)- Autowired是如何注入的
- 项目要实现多数据源动态切换,咋搞?
- 这一次,带你全面了解锁机制!
- GitHub标星1w+超牛的微服务项目,开发脚手架
- Redis中hash、set、zset的底层数据结构原理
- Redis中string、list的底层数据结构原理
- Redis中字符串的表示
- Redis分布式锁背后的原理
- 解析Transformer模型