使用递归实现全排列

R版本的递归生成全排列 问题: https://mp.weixin.qq.com/s/U29Ha92GXgRTAWTXe2sOQA 递归 函数自己调用自己的过程,称为套娃 递归。 举一个简单例子, 阶乘。 fact <- function(n){ if (n == 1){ return(1) } res <- n * fact(n-1) return(res) } ############## > fact(9) [1] 362880 实际上递归程序不可能一直递归循环下去,需要利用其它条 阅读详情

重新看了回递归之后,顺便写了个使用递归实现全排列的算法,感觉空间复杂度有点大,等有时间再更改吧,发表出来,因为算法功底实在有限,所以希望哪位可以帮忙优化优化,本人将感激不尽!

算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种

如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况

代码如下:

public class AllPermutation
{
	public static void main(String[] args)
	{
		//使用递归完成全排列
		char[] source=new char[]{'A','B','C'};
		char[] result=new char[source.length];
		allPermutation(0,source,result);	
		
	}
	/**
	 * 
	 * @param index当前考虑的数的下标(从0开始)
	 * @param source
	 * @param result
	 */
	public static void allPermutation(int index,char[] source,char[] result){
		//当源数据中只有一个字符时,将该字符加入结果数组,并输出
		if(source.length==1){
			result[index]=source[0];
			show(result);
			return ;
		}
		
		for(int i=0;i<result.length-index;i++){
			result[index]=source[i];
			char[] newSource=getNewSource(source,source[i]);
			allPermutation(index+1, newSource,result);
		}
	}
	public static void show(char[] result){
		System.out.println(result);
	}
	/**
	 * 生成去掉指定字符的新源数据数组
	 * @param source 原来的源数据数组
	 * @param c 指定去掉的字符
	 * @return
	 */
	public static char[] getNewSource(char[] source,char c){
		char[] newSource=new char[source.length-1];
		for(int i=0,j=0;i<source.length;i++){
			if(source[i]!=c){
				newSource[j]=source[i];
				j++;
			}
		}
		return newSource;
	}
}

YOLOv11在视频流中的时序建模改进-(加入ConvLSTM或Transformer捕捉帧间关联) 本文提出了一种结合ConvLSTM和Transformer的改进YOLOv11算法,用于增强视频目标检测的时序建模能力。针对视频检测中运动模糊、遮挡等挑战,研究分析了ConvLSTM的局部时空特征建模和Transformer的全局注意力机制之间的互补性。通过数学公式详细阐述了ConvLSTM的门控机制和Transformer的自注意力计算原理,并提出分层融合策略:底层使用ConvLSTM处理高分辨率特征捕捉局部运动,高层应用Transformer建立全局时空关联。改进方案在YOLOv11架构中插入时序增强模 阅读详情

相关推荐

Multisim14安装失败?手把手教你彻底清理残留文件(附专用卸载工具)

本文针对Multisim14安装失败问题,提供了一套从根源解决的完整方案。文章详细分析了安装失败的三大元凶——文件残留、注册表残留和隐藏组件,并手把手指导用户使用专用卸载工具进行标准化清理,再结合手动深度清理文件系统和注册表,最终实现彻底卸载和完美重装,有效解决Multisim14安装问题。

weixin_29179311的博客 317

递归输出全排列

递归学习:一个递归函数实现一般包括基本部分和递归部分两部分。基本部分是为了终止递归,递归部分是不断的递归进去直到基本部分终止。虽然递归运算需要耗费大量的栈空间(注意:栈区是由编译器自动分配和释放的,存放函数返回值、局部变量等值得地方),但是递归算法可以解决一些用非递归算法不容易解

清闲老窝的专栏 3030

人工智能入门系列之一: 鸢尾花(Iris)多分类的神经网络详解及代码实现

这是最好的时代,我们一起来打造属于自动驾驶汽车上路、无人机飞天、智能机器人管工厂的AI未来 人工智能领域分化为两个阵营:其一是规则式(rule-based)方法,在人工智能早期占主峰;其二是神经网络(neural network)方法,后起之秀。随着硬件水平的提高,算力的指数式增长;人工智能的重心已经从规则式的专家时代转移到神经网络的数据时代。 “神经网络”不选择把人脑熟稔的逻辑规则传授给计算机...

NLP家的码奴小荷的博客 2万+

递归实现全排列

#include int swap(int *a,int *b) { int temp=*a; *b=*a; *a=temp; } void sort(int array[],int now,int top)//now为排到的当前下标;top为下标头 { if(now==top){ for(int i=0;i<=top;i++)

不忘初心 785

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 372

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 333

全排列的递归实现

全排列的递归实现 题目要求: 给出一个n, 按字典序输出1~n的全排列。 代码 #include<stdio.h> #include<stdlib.h> void fun(int cur[], int m, int arr[], int n) { int i, j; if (n == 0) { for (i = 0; i < m; i++) { printf("%d ", cur[i]); } printf("\n"); } for (i = 0;

m0_51653236的博客 215

Jetson AGX Orin边缘AI实战:用YOLOv8做目标检测,我的环境配置踩坑与优化记录

本文详细记录了在Jetson AGX Orin上部署YOLOv8目标检测模型的环境配置与优化过程。从JetPack版本确认、PyTorch安装陷阱到Torchvision编译技巧,再到YOLOv8部署和系统级优化,提供了完整的实战指南。特别针对边缘AI设备的特性,分享了CUDA加速、内存管理等性能调优经验,帮助开发者高效完成工业级AI应用部署。

weixin_30839881的博客 376

全排列输出(递归实现)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33701617的博客 751

工业机器人关节拆装流程_一文读懂模块化直驱电机及机器人关节模组

私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!如果说芯片是智能行业最为重要的核心元件,那么电机几乎可以说是支撑了整个自动化和大工业生产以及现代社会最为重要的部件,全世界90%的能源是由电机发出来的,而70%是由电机消耗调的,电机可以说是整个人类社会能源循环的占有绝对地位的产品。普通伺服电机伺服电机其实已经算是电动机中比较高端的类型,特别是永磁同步类型的伺服电机,由于其启动快速,惯量...

weixin_32159771的博客 2153

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

全排列的实现方法--递归&字典序

一:背景 全排列在很多笔试都有应用,是一个很常见的算法,关于这类的题目变化很多。这种算法的得到基于以下的分析思路。  给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。 例如:给定{1,2,3},全排列为3!个,即: {1,2,3},{1,3,2} {2,1,3},{2,3,1} {3,1,2},{3,2,1} 下来分别说下递归法,John

半壶老酒 1万+

手把手教你完成基于matlab的路面裂缝检测系统设计

裂缝是路面病害最早的形态之一,只有在裂缝出现的早期进行维护,才能有效地提高公路的使用寿命。因此,路面裂缝的检测识别系统对于提升公路质量有着重大的意义。首先,对路面裂缝图像进行相应的预处理,目的是减小环境因素的影响,消除无用的噪点。然后提取目标图像特征,判断路面裂缝类型,标记出路面裂缝的位置。最后通过设计的 GUI 界面来集成各个关键步骤,显示所得到的试验结果。仿真结果表明,设计的路面裂缝检测识别系统是高效可行的。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1216

Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容。 public class AllPermutation { public static void main(String[] args) { char[] source=new char[]{'A','B','C'}; char[] result=new cha...

weixin_34204057的博客 171

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

递归实现全排列&使用next_permutation

递归实现全排列&使用STL 1.递归版 栗子:对1、2、3三个数字进行全排列,并按照字典序从小到大的顺序进行输出1~n的全排列。 【思路】 递归角度,如果把问题描述成“输出1~n这n整数的全排列”——将原问题分为若干子问题:“输出以1开头的全排列”、“输出以2开头的全排列”、“输出以3开头的全排列”。。。“输出以n开头的全排列”。 【做法】 数组P——存放当前的排列; 数组hashtable[x]——为true时即整数x已经在数组P中。 (1)按顺序将P数组的第1到n位中填入数字,假设填好了P[1]

发现问题,并解决问题,批判性思维 1182

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用递归方式实现全排列

写的不好看,思路是在前一个数全排列的基础上在每个位置插入当前的数。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; import static java.util.Arrays.sort; class Main { public List<List<Integer>> allSorted(Lis

jinyuehai的博客 289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

使用递归方法实现全排列

问题:编程实现对任一集合(e.g. {a b c})的全排列。 一、原理分析 总的思路就是,将集合中的每一个元素都和第一个元素交换一下位置,这样就形成了三个新的集合——a{b,c},b{a,c},c{a,b}。再对每一个"{}"括起来的集合进行同样的操作,直到集合中只剩下一个元素时,输出结果,递归程序返回。如下所示: 第一轮交换   |    进一步交换    |    因为只剩下1个元素了...

DNFM的博客 885

使用递归实现全排列的算法

在这一篇中,我们来讲如何用递归来实现字符的全排列算法,当然同样适用于其他的数据类型,不多说了,直接上代码: private static void doAnagram(int size2) { //进行递归调用,不断的调用自己,将n-1个元素进行转换,并且进行n次的循环。此处需要重点理解 if (size2 == 1) { return; } for (int i

凌京的专栏 1560

JS使用递归简单实现--数组的全排列

JS使用递归简单实现--数组的全排列

weixin_42662753的博客 1008

使用递归实现全排列输出

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 {     class Program     {         static

hemeinvyiqiluoben的专栏 632

使用Python递归实现全排列

整体思路 1:确定两个列表 2:一个列表是用来存放需要全排列的数 3:另一个列表是用来存放已经排列好的数 4:将上面两个列表不断进行递归 5:最后结果列表里添加的是最后排列好的列表 代码 import math import copy # 定义全排列的函数 def permutation(need_perm, Already_perm): global temp_list if len(need_perm) == 0: temp_list.append(Already_p

Always-Learning 1645

[C++]数据结构实验01:使用递归实现简单的全排列

/*****************************************************************************/ /* 实验一:递归练习 /* 1、 输入2-10个大于0的正整数,如果输入0作为结束。 /* 2、 输出这几个整数的全排列,每个数之间用半角“,”隔开, /* 中间不要有空格,每个排列单独一行。 /*********************...

thewebcode 292

使用递归实现数的全排列

设有一个int数组,包含5个元素,每个元素只能取0或1,求这5个元素的全排列。

qinlianfa的专栏 636

c语言字符全排列数组,使用c语言递归实现字符串的全排列

一、介绍递归两个基本要素:1.边界条件(递归出口)确定递归何时终止2.递归模式(递归体)大问题如何分解为小问题二、递归实现字符串全排列1.二话不说先上代码:#include #include #include void swap(char *str,int i,int j){char c;c = str[i];str[i] = str[j];str[j] = c;}void pernutation...

weixin_36229293的博客 966

python 之递归与非递归实现全排列

全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。公式:全排列数f(n)=n!(定义 n 为正整数)# 给定的元素中,抽取一定数量的元素进行排列,求排列的总数# 现以26个字母为例,从 a 开始,n 个字母的不同种排列数量为 n! 将这 n! 种不同排列进行输出  1 &lt;= n &lt;= 2...

yzmumu的博客 2088

全排列(递归)

1.全排列(递归) 给定一串无重复的字符或数字,输出其有所有排列,并统计其共有排列个数。 例:给定个数n(n

MrxiaoAXiao的博客 1万+
上一篇: Solr4.0 如何配置使用UUID自动生成id值
下一篇: 随笔:1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
KeepThinking_
博客等级 码龄15年 50粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值