本篇文章给大家谈谈java数组全排列,以及java代码实现数组顺序排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、如何用java输出一个数组的全排列?不能用递归,用递归的话,很快就内存溢出了!2、java怎么排列出一组数字所有排列方式3、Java数组的全排列,里面布尔类型的数组vis[ ],在递归算法里起了什么作用,递归那块理解不了,求详细解答4、java怎么搞全排列
如何用java输出一个数组的全排列?不能用递归,用递归的话,很快就内存溢出了!
我觉得吧,你输出一个全排列用不了多少内存,怎么就能溢出呢?
首先,递归费不了多少内存,应该可以完成任务。
其次,你递归都干了些什么?别告诉我每层递归把数组复制一遍,你把位置递归一下就可以了。
如果不喜欢递归,可以自己弄个栈,其实差不多,速度略快,空间略小。
如果还是不明白,把全部源码贴出来看看。
java怎么排列出一组数字所有排列方式
@SuppressWarnings(“unchecked”)
public static void main(String[] args) throws Exception {
int arr[] = { 1, 2, 3 };
for (int i = 0; i 3; i++)
System.out.print(arr[i]);
System.out.println();
// 开始循环调用字典序算法,直至全排列排列完毕
// 返回false代表排列完毕,返回true代表仍有未排列完的数
while (fullSort(arr, 3));
}
final static boolean fullSort(int arr[], int n) {
int i = 0, j = 0, k = -1, l, temp;
for (i = 0; i n – 1; i++) { // 找最后的升序的位置
if (arr[i] arr[i + 1])
k = i;
}
if (k = 0) {
l = -1;
for (i = 0; i n; i++) { // 找到最后一个升序且是最大的数的下标
if (arr[k] arr[i])
l = i;
}
temp = arr[k];
arr[k] = arr[l];
arr[l] = temp;
for (i = k + 1; i n; i++)// 将k+1的元素与末尾对调
{
j = n – i + k;
if (i = j)
break;
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
if (k == -1)
return false;
for (i = 0; i n; i++)
System.out.print(arr[i]);
System.out.println();
return true;
}
Java数组的全排列,里面布尔类型的数组vis[ ],在递归算法里起了什么作用,递归那块理解不了,求详细解答
不要急于看代码,你心理要知道全排列的思路,不注重思路是很多程序员易犯的错误。
全排列算法:
如果我求得固定第一位后的排列,那么全部排列就可以求出,固定第一位有10种可能,可以循环求得。
如果我求得固定第二位后的排列,固定第一位后的排列就可以求出,固定第二位有9种可能,可以循环求得。
。。。
如果我求得固定第10位后的排列,固定第9位后的排列就可以求出,固定第10位有1种可能,可以循环求得。
这很明显是递归的算法。
static void dfs(int start,int end,int num){//为全部排列的集合,start为数字的位置,end为最后一位,num多余的
if(start==end){//当前的数字位置为最后一位时,说明,一个序列已经生成
for(int i=1;iend;i++)
System.out.print(a[i]+” “);//输出序列
System.out.println();
}
else{//序列没有生成时
for(int i=1;iend;i++){
if(vis[i])//i是否在前面使用过
continue;//如果是直接跳过
a
本篇文章给大家谈谈java数组全排列,以及java代码实现数组顺序排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
=i;//确定start位置的数字,当start为1时就是确定第一位,有10种可能
vis[i]=true;//设置i为已使用状态,避免下一位使用i
dfs(start+1,end,num);//求得确定start位后的全部序列
vis[i]=false;//设置i为未使用状态
}
}
java怎么搞全排列
尽量用递归好理解一些,打个断点
public class Permutation {
public static void permulation(int[] list, int start, int length) {
int i;
if (start == length) {
for (i = 0; i length; i++)
System.out.print(list[i] + ” “);
System.out.println();
} else {
for (i = start; i length; i++) {
swap(list, start, i);
permulation(list, start + 1, length);
swap(list, start, i);
}
}
}
public static void swap(int[] list, int start, int i) {
int temp;
temp = list
本篇文章给大家谈谈java数组全排列,以及java代码实现数组顺序排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
;
list
本篇文章给大家谈谈java数组全排列,以及java代码实现数组顺序排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
= list[i];
list[i] = temp;
}
public static void main(String[] args) {
int length = 3;
int start = 0;
int list[] = new int[length];
for (int j = 0; j length; j++)
list[j] = j + 1;
permulation(list, start, length);
}
}
关于java数组全排列和java代码实现数组顺序排列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。