「java递归全排列」递归实现数组全排列

博主:adminadmin 2022-12-10 04:30:07 67

本篇文章给大家谈谈java递归全排列,以及递归实现数组全排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java全排列递归算法

不会JAVA只能是写个C的了

#includestdio.h

#includestring.h

const int MAX=10;

int n;

bool used[MAX]={false};

int a[MAX];

int ans[MAX];

void DFS(int deep)

{

int i;

if(deep==n)

{

for(i=0;in;i++)

{

printf("%d ",ans[i]);

}

puts("");

return ;

}

for(i=0;in;i++)

{

if(used[i])continue;

used[i]=true;

ans[deep]=a[i];

DFS(deep+1);

used[i]=false;

}

}

int main()

{

int i;

scanf("%d",n);

for(i=0;in;i++)

{

scanf("%d",a[i]);

}

DFS(0);

return 0;

}

在java环境中用递归方法求n个数的无重复全排列,n=3。

给你个思路:

函数内判断

if (元素个数==2){

打印结果:元素1,元素2;

打印结果:元素2,元素1;

} else {

打印结果:元素1,递归本函数(其他元素);

打印结果:递归本函数(其他元素),元素1;

}

java中,用递归方法求n个数的无重复全排列,n=3。

程序如下所示,输入格式为:

5

3 1 2 1 2

第一行是数字个数,第二行有n个数,表示待排列的数,输入假设待排序的数均为非负数。

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Arrays;

import java.util.Scanner;

public class Main {

    static final int maxn = 1000;

    int n;            // 数组元素个数

    int[] a;        // 数组

    

    boolean[] used;    // 递归过程中用到的辅助变量,used[i]表示第i个元素是否已使用

    int[] cur;        // 保存当前的排列数

    

    // 递归打印无重复全排列,当前打印到第idx位

    void print_comb(int idx) {

        if(idx == n) {    // idx == n时,表示可以将cur输出

            for(int i = 0; i  n; ++i) {

                if(i  0) System.out.print(" ");

                System.out.print(cur[i]);

            }

            System.out.println();

        }

        

        int last = -1;                            // 因为要求无重复,所以last表示上一次搜索的值

        for(int i = 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;

            }

        }

    }

    

    public void go() throws FileNotFoundException

    {

        Scanner in = new Scanner(new File("data.in"));

        // 读取数据并排序

        n = in.nextInt();

        a = new int[n];

        for(int i = 0; i  n; ++i) a[i] = in.nextInt();

        Arrays.sort(a);

        

        // 初始化辅助变量并开始无重复全排列

        cur = new int[n];

        used = new boolean[n];

        for(int i = 0; i  n; ++i) used[i] = false;

        print_comb(0);

        in.close();

    }

    

    public static void main(String[] args) throws FileNotFoundException{

        new Main().go();

    }

}

客观来说,非递归的无重复全排列比较简单且高效。

一个JAVA编程求助:用递归方法求n(n=3)个数的无重复全排列

import java.util.ArrayList;

import java.util.List;

public class Test {

public static void main(String[] args) {

Test t = new Test();

t.contList();

t.getAllArray(list, 0);

}

private static ListInteger list = new ArrayList();

private void contList(){

list.add(1);

list.add(2);

list.add(3);

}

public void getAllArray(ListInteger inlist,int site){

int tempsite = site;

if(site = inlist.size()){

return;

}

Integer firstNode = inlist.get(site++);

List tempList = new ArrayList(inlist);

tempList.remove(tempsite);

for(int i = 0;i tempList.size();i++){

System.out.print(firstNode);

for(int j = i;j tempList.size()+i;j++){

if(j tempList.size()){

System.out.print(","+tempList.get(j));

}else{

System.out.print(","+tempList.get(j-tempList.size()));

}

}

System.out.println("");

}

getAllArray(inlist,site);

}

}

n=3这个运行结果是

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

import java.util.*;

import java.io.*;

public class Test {

public static void main(String[] args) throws Exception {

String[] array = new String[] { "1", "2", "3", "4" };

int length=array.length;

listAll(Arrays.asList(array), "",length);

}

public static void listAll(List candidate, String prefix,int length) {

if(prefix.length()==length)

System.out.println(prefix);

for (int i = 0; i candidate.size(); i++) {

List temp = new LinkedList(candidate);

listAll(temp, prefix + temp.remove(i),length);

}

}

}

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递归全排列,以及递归实现数组全排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

; // 交换数组第一个元素与后续的元素

                nums

本篇文章给大家谈谈java递归全排列,以及递归实现数组全排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

= nums[i];

                nums[i] = temp;

                permutation(nums, start + 1, end); // 后续元素递归全排列

                nums[i] = nums

本篇文章给大家谈谈java递归全排列,以及递归实现数组全排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

; // 将交换后的数组还原

                nums

本篇文章给大家谈谈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怎么搞全排列

尽量用递归好理解一些,打个断点

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递归全排列,以及递归实现数组全排列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

;

list

本篇文章给大家谈谈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递归全排列和递归实现数组全排列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-10,除非注明,否则均为首码项目网原创文章,转载请注明出处。