導航:首頁 > 編程語言 > 全排列java

全排列java

發布時間:2023-02-15 02:28:26

java全排列 數組

全排列演算法很多,這是其中一個,使用遞歸——


import java.util.ArrayList;
import java.util.List;
public class PermAComb {
static List<int[]> allSorts = new ArrayList<int[]>();

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[start]; // 交換數組第一個元素與後續的元素
nums[start] = nums[i];
nums[i] = temp;
permutation(nums, start + 1, end); // 後續元素遞歸全排列
nums[i] = nums[start]; // 將交換後的數組還原
nums[start] = 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; i<a.length; i++) {
int[] nums = a[i];
for (int j=0; j<nums.length; j++) {
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}

㈡ 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[start];
list[start] = 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全排列遞歸演算法

思路:先有一個起始排列,如1234.從後面掃描,直到找到a[k],a[k]<a[k+1];再從後面掃描,直到找到a[j],這里有回 a[k]<a[j]。交換答a[k],a[j].再把a[k+1],...a[n-1]排序(從小到大),即得到了一個排列,再循環下去,直到找出所有的排序。用C語言的,參考下: http://user.qzone.qq.com/646203846/infocenter?ptlang=2052

㈣ java中,用遞歸方法求n個數的無重復全排列,n=3。

程序如下所示,輸入格式為:

5
31212

第一行是數字個數,第二行有n個數,表示待排列的數,輸入假設待排序的數均為非負數。


importjava.io.File;
importjava.io.FileNotFoundException;
importjava.util.Arrays;
importjava.util.Scanner;

publicclassMain{
staticfinalintmaxn=1000;
intn;//數組元素個數
int[]a;//數組

boolean[]used;//遞歸過程中用到的輔助變數,used[i]表示第i個元素是否已使用
int[]cur;//保存當前的排列數

//遞歸列印無重復全排列,當前列印到第idx位
voidprint_comb(intidx){
if(idx==n){//idx==n時,表示可以將cur輸出
for(inti=0;i<n;++i){
if(i>0)System.out.print("");
System.out.print(cur[i]);
}
System.out.println();
}

intlast=-1;//因為要求無重復,所以last表示上一次搜索的值
for(inti=0;i<n;++i){
if(used[i])continue;

if(last==-1||a[i]!=last){//不重復且未使用才遞歸下去
last=a[i];
cur[idx]=a[i];

//回溯法
used[i]=true;
print_comb(idx+1);
used[i]=false;
}
}
}

publicvoidgo()throwsFileNotFoundException
{
Scannerin=newScanner(newFile("data.in"));

//讀取數據並排序
n=in.nextInt();
a=newint[n];
for(inti=0;i<n;++i)a[i]=in.nextInt();
Arrays.sort(a);

//初始化輔助變數並開始無重復全排列
cur=newint[n];
used=newboolean[n];
for(inti=0;i<n;++i)used[i]=false;
print_comb(0);
in.close();
}

publicstaticvoidmain(String[]args)throwsFileNotFoundException{
newMain().go();
}
}

客觀來說,非遞歸的無重復全排列比較簡單且高效。

㈤ java 輸入一個字元串,列印出該字元串中字元的所有排列

實現思路:就是輸入字元串後,通過遞歸的方式,循環每個位置和其他位置的字元。

importjava.util.Scanner;

publicclassDemo001{

publicstaticvoidmain(String[]args){
Stringstr="";

Scannerscan=newScanner(System.in);

str=scan.nextLine();

permutation(str.toCharArray(),0);
}

publicstaticvoidpermutation(char[]str,inti){
if(i>=str.length)
return;
if(i==str.length-1){
System.out.println(String.valueOf(str));
}else{
for(intj=i;j<str.length;j++){
chartemp=str[j];
str[j]=str[i];
str[i]=temp;

permutation(str,i+1);

temp=str[j];
str[j]=str[i];
str[i]=temp;
}
}
}
}

㈥ 如何用java輸出一個數組的全排列不能用遞歸,用遞歸的話,很快就內存溢出了!

我覺得吧,你輸出一個全排列用不了多少內存,怎麼就能溢出呢?
首先,遞歸費不了多少內存,應該可以完成任務。
其次,你遞歸都幹了些什麼?別告訴我每層遞歸把數組復制一遍,你把位置遞歸一下就可以了。
如果不喜歡遞歸,可以自己弄個棧,其實差不多,速度略快,空間略小。
如果還是不明白,把全部源碼貼出來看看。

閱讀全文

與全排列java相關的資料

熱點內容
裝win10系統重新分區嗎 瀏覽:882
微信已被清理的文件 瀏覽:771
ug8的例圖在哪個文件夾里 瀏覽:641
dat文件轉換avi 瀏覽:173
安卓編程里上下邊距怎麼寫 瀏覽:427
雲班課文件在哪個文件夾 瀏覽:298
健康碼用到了哪些方面的大數據 瀏覽:379
蘋果手機拆裝教程 瀏覽:244
excel抓取文件鏈接 瀏覽:510
魔靈召喚主角升級 瀏覽:746
linux文件系統實驗 瀏覽:897
怎麼讀取電腦資料庫中的數據 瀏覽:443
蘋果7怎麼開啟鎖屏密碼 瀏覽:98
怎麼找到圖片上的文件 瀏覽:644
qq接收文件轉移 瀏覽:323
雙色球哪些數據最重要 瀏覽:133
從pc上傳文件找不到路徑 瀏覽:484
電腦文件傳微信朋友圈 瀏覽:9
豐都學校網站製作多少錢 瀏覽:183
linux分片視頻 瀏覽:805

友情鏈接