社区
Java SE
帖子详情
将1,2,3,4,5的各种排列顺序打印出来?如:12345,12354。应该有5!=120种吧(最好用递归)
high_land
2006-10-17 04:10:49
将1,2,3,4,5的各种排列顺序打印出来?如:12345,12354。应该有5!=120种吧(最好用递归)
...全文
772
13
打赏
收藏
将1,2,3,4,5的各种排列顺序打印出来?如:12345,12354。应该有5!=120种吧(最好用递归)
将1,2,3,4,5的各种排列顺序打印出来?如:12345,12354。应该有5!=120种吧(最好用递归)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xu_lengqing
2006-10-19
打赏
举报
回复
chiefwolf(丢丢)的不错... 比较规范,可读性也比较好
liuguangliang
2006-10-19
打赏
举报
回复
import java.util.*;
public class SortF{
String pailie[]={"1","2","3","4","5"};
int n=pailie.length;
int numGraph[][]=new int[n][n];//二维数组来表示图
boolean judge[]=new boolean[n];//用来判断图中的结点是否在深度优先搜索队列中。
String result="";
ArrayList al=new ArrayList();//用来保存字符串结果
public static void main(String [] args){
new SortF().start();
}
//初始化图中结点的关系,自身是不可以到达自身的;初始化判断数组。
public SortF(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j) numGraph[i][j]=0;
else numGraph[i][j]=1 ;
}
judge[i]=false;
}
}
public void start(){
//始图中个结点都可以为第一个结点
for(int i=0;i<n;i++){
depthFirstSearsh(i);//有了第一个结点后,调用深度优先搜索。
}
//遍历输出字符串。
Iterator ite = al.iterator();
while (ite.hasNext()) {
String string = (String) ite.next();
System.out.println(string);
}
}
//深度优先搜索
public void depthFirstSearsh(int startN){
judge[startN]=true;//设为true后,记录了本结点已经被访问
result=result+pailie[startN];//在result中增加一个字符串,当增加到N个时,则装入al中
if(result.length()==n){
al.add(result);
}
for(int i=0;i<n;i++){
if(numGraph[startN][i]==1&&judge[i]==false){//如果statN结点到i结点是连通的,且i结点未被访问
depthFirstSearsh(i);//以i结点为根,继续搜索
}
}
judge[startN]=false;//释放结点,使得深度优先搜索,返回到上一层。
result = result.substring(0, result.length() -1);//result去掉最后一个字符串
}
}
emin_lee
2006-10-18
打赏
举报
回复
mark!
high_land
2006-10-18
打赏
举报
回复
还在学习chiefwolf(丢丢)的方法,如果还有好的方法可以在贴出来。
high_land
2006-10-18
打赏
举报
回复
liuguangliang(小刀刘)的方法有局限性,不过能做出来就很列害了。
chiefwolf(丢丢)方法很好,
最后有个地方要改一下:
StringBuffer sb = new StringBuffer(""+firstNum);
showSort(newArray,sb.append(num0));
谢谢了!!!!!!!!!
high_land
2006-10-18
打赏
举报
回复
有时一些算法也需要。
碧海情天-赵亮
2006-10-18
打赏
举报
回复
这种需求正常情况下没有用,基本只有一种应用:作暴力破解软件.
chiefwolf
2006-10-17
打赏
举报
回复
我来贴一个:
package jwolf.util;
public class Test{
public static void main(String[] args) {
char number[] = new char[]{'1','2','3','4','5'};
StringBuffer first = new StringBuffer();
// 递归函数执行
showSort(number,first);
}
/**
* @param num 待处理的数组
* @param firstNum 在各个上级递归中逐渐追加形成的字符串
*/
public static void showSort(char num[],StringBuffer firstNum){
for(int i=0;i<num.length;i++){
//依次把从0位到最后一位的数字交换到最前面
char temp = num[i];
num[i] = num[0];
num[0] = temp;
//交换后取得第一个字符,把后面的字符重新组成一个数组
char num0 = num[0];
char newArray[] = new char[num.length-1];
for(int j=0;j<num.length-1;j++){
newArray[j] = num[j+1];
}
//如果参数数组的长度为1,则输出结果
if(num.length==1){
String result = firstNum.append(num[0]).toString();
System.out.println(result);
}
//否则,把此次得到的第一个字符追加到传入的字符串,并递归调用
else{
StringBuffer sb = new StringBuffer(firstNum);
showSort(newArray,sb.append(num0));
}
}
}
}
liuguangliang
2006-10-17
打赏
举报
回复
请大家指正
liuguangliang
2006-10-17
打赏
举报
回复
public void prints(int k1,int,k2,int k3,int k4,int k5){
int i=0;
if(k5!=0){
System.out.print(k1*10000+k2*1000+k3*100+k4*10+k5);
return;
for(i=1;i<=5;i++){
if(k1==0) prints(i,k2,k3,k4,k5);
else if(k2==0){
if(i==k1) continue;
else prints(k1,i,k3,k4,k5);
}
else if(k3==0){
if(i==k2||i==k1) continue;
else prints(k1,k2,i,k4,k5);
}
else if(k4==0){
if(i==k3||i==k2||i==k1) continue;
else prints(k1,k2,k3,i,k5);
}
else if(k5==0){
if(i==k4||i==k3||i==k2||i==k1) continue;
else prints(k1,k2,k3,k4,i);
}
}//for结束。
}
liuguangliang
2006-10-17
打赏
举报
回复
实现起来不难,但是递归,暂时还没想到
high_land
2006-10-17
打赏
举报
回复
我大学不是计算机地,没有大学C的课本?
公亮
2006-10-17
打赏
举报
回复
这个递归不是很简单?
大学时候C的课本上就有!
C语言详解:函数
递归
专题
本文详细介绍了
递归
的概念、优缺点、使用场景及必要条件,并通过多个实例,如
打印
整数每一位、
递归
求阶乘、模拟strlen函数、字符串逆序、计算数字各位之和、求幂和斐波那契数列,深入解析了
递归
的运用。此外,还探讨了经典的汉诺塔问题和青蛙跳台阶问题的
递归
解法,帮助读者理解
递归
在解决复杂问题中的重要性。
1062. 【
递归
算法】字符
排列
(Standard IO)
该问题是一个经典的编程挑战,要求使用
递归
算法找出A,B,C,D,E这五个字符的所有不重复
排列
。由于是
排列
问题,解决方案通常涉及到回溯或
递归
,计算出所有可能的
顺序
。没有输入数据,程序将直接输出所有可能的
排列
总数,这个数值可以通过计算5的阶乘得到,即5!=
120
。,
函数
递归
:
递归
的概念
本文介绍了函数
递归
的概念,即自己调用自己,同时说明了
递归
的两个限制条件。通过阶乘、
顺序
打印
数字、斐波那契数等实操案例展示
递归
的应用。还对比了
递归
与迭代,指出
递归
代码简洁但效率低,迭代代码执行效率高但复杂。
递归
- 跳水运动员的真实排名
博客介绍了用
递归
方法求解跳水运动员真实排名的问题。5位运动员预测比赛结果,每人说对一半。通过
递归
对数组元素进行全
排列
,枚举所有可能,检查是否满足每人一真一假的条件,最终找到符合条件的名次并输出。
【搞定左神算法初级班】第7节:暴力
递归
、动态规划
这篇博客详细介绍了
递归
和动态规划的概念及应用,通过五个
递归
问题(如汉诺塔、字符串子序列、
排列
、母牛数量)和两个动态规划问题(矩阵最小路径和、背包问题)进行讲解,阐述了如何从暴力
递归
转换为动态规划,强调了动态规划避免重复计算和无后效性的特点。
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章