「java数组的全排列」java中的数组排序
今天给各位分享java数组的全排列的知识,其中也会对java中的数组排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java如何实现対一数组全排列,
- 2、如何用java输出一个数组的全排列?不能用递归,用递归的话,很快就内存溢出了!
- 3、java怎么搞全排列
- 4、java 求全排列问题,用vector记录数组怎么不行,还有数组越界,总是想不到哪儿错了
- 5、java全排列 数组
- 6、Java数组的全排列,里面布尔类型的数组vis[ ],在递归算法里起了什么作用,递归那块理解不了,求详细解答
java如何实现対一数组全排列,
事实上,就是对数组下标的全排列
第2,就是从一个开始去找不是自己位置的相同字符
如何用java输出一个数组的全排列?不能用递归,用递归的话,很快就内存溢出了!
我觉得吧,你输出一个全排列用不了多少内存,怎么就能溢出呢?
首先,递归费不了多少内存,应该可以完成任务。
其次,你递归都干了些什么?别告诉我每层递归把数组复制一遍,你把位置递归一下就可以了。
如果不喜欢递归,可以自己弄个栈,其实差不多,速度略快,空间略小。
如果还是不明白,把全部源码贴出来看看。
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 求全排列问题,用vector记录数组怎么不行,还有数组越界,总是想不到哪儿错了
看了一下,你把arr存入vector中,其实这时候存的是arr的地址,所以arr发生变化时还是会会发生改变的。修改一下吧。
vrr.add(arr);
改成
int[] out = new int[arr.length];
System.arraycopy(arr, 0, out, 0, arr.length);
vrr.add(out);
java全排列 数组
全排列算法很多,这是其中一个,使用递归——
import java.util.ArrayList;
import java.util.List;
public class PermAComb {
static Listint[] allSorts = new ArrayListint[]();
public static void permutation(int[] nums, int start, int end) {
if (start == end) { // 当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可
int[] newNums = new int[nums.length]; // 为新的排列创建一个数组容器
for (int i=0; i=end; i++) {
newNums[i] = nums[i];
}
allSorts.add(newNums); // 将新的排列组合存放起来
} else {
for (int i=start; i=end; i++) {
int temp = nums
今天给各位分享java数组的全排列的知识,其中也会对java中的数组排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
; // 交换数组第一个元素与后续的元素nums
今天给各位分享java数组的全排列的知识,其中也会对java中的数组排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
= nums[i];nums[i] = temp;
permutation(nums, start + 1, end); // 后续元素递归全排列
nums[i] = nums
今天给各位分享java数组的全排列的知识,其中也会对java中的数组排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
; // 将交换后的数组还原nums
今天给各位分享java数组的全排列的知识,其中也会对java中的数组排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
= temp;}
}
}
public static void main(String[] args) {
int[] numArray = {1, 2, 3, 4, 5, 6};
permutation(numArray, 0, numArray.length - 1);
int[][] a = new int[allSorts.size()][]; // 你要的二维数组a
allSorts.toArray(a);
// 打印验证
for (int i=0; ia.length; i++) {
int[] nums = a[i];
for (int j=0; jnums.length; j++) {
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}
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数组的全排列的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中的数组排序、java数组的全排列的信息别忘了在本站进行查找喔。