全排列javajiandan(全排列算法思路解析)

本篇文章给大家谈谈全排列javajiandan,以及全排列算法思路解析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、java怎么搞全排列2、JAVA 全排列算法3、java中,用递归方法求n个数的无重复全排列,n=3。

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

本篇文章给大家谈谈全排列javajiandan,以及全排列算法思路解析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

;

list

本篇文章给大家谈谈全排列javajiandan,以及全排列算法思路解析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

= 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);

}

}

全排列javajiandan(全排列算法思路解析)

JAVA 全排列算法

递归实现,取数字(字符串)中第i个位置的字符,然后将他和剩余的字符拼接,剩余的字符串当成有一个全排列的输入,这样递归下去,只剩一个字符时全排列就是本身。程序中使用set去除了重复的数据,如果需要保留,将set换为list接口即可。

package mytest;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

/*

* @date:2012-2-8

* @author:

*

* 输入一个数字,讲输出 1到这个数字的全排列

*/

public class MyDemo2 {

private static SetString SET_STRING = new HashSetString();

private static SetLong SET_NUM = new HashSetLong();

public static void main(String[] args) {

System.out.println(“begin …… “);

testLong(234);

testString(“a23”);

print(SET_NUM);

print(SET_STRING);

System.out.println(“end …… “);

}

/**

* 测试数字

* @param num

*/

private static void testLong(long num){

long testNum = num;

String[] permutation;

for(long l=0; l=testNum; l++){

permutation = getAllOrder(String.valueOf(l));

for (int i = 0; i permutation.length; i++) {

SET_NUM.add(Long.valueOf(permutation[i]));

}

}

}

/**

* 测试字符串

* @param str

*/

private static void testString(String str){

String[] permutation = getAllOrder(str);

for (int i = 0; i permutation.length; i++) {

SET_STRING.add(permutation[i]);

}

}

private static void print(Set set){

System.out.println(“/*****************************************************/”);

int i=0;

for(Iterator it = set.iterator(); it.hasNext();){

i++;

if(i%10 == 0){

System.out.println();

}

System.out.print(it.next() + ” “);

}

System.out.println();

System.out.println(“/*****************************************************/”);

}

/**

* 递归算法 全排列 去除重复

* @param str

* @return

*/

private static String[] getAllOrder(String str) {

String [] arrResult = null;

SetString set = new HashSetString();

if(str.length()1){

String result = “”;

String charXInString;

String remainString;

for (int i = 0; i str.length(); i++) {

charXInString = str.charAt(i) + “”;

remainString = str.substring(0, i)+ str.substring(i + 1, str.length());

for (String element : getAllOrder(remainString)) {

result = charXInString + element;

set.add(result);

}

}

arrResult = set.toArray(new String[set.size()]);

}else{

arrResult = new String[]{str};

}

return arrResult;

}

}

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();

    }

}

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

关于全排列javajiandan和全排列算法思路解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月31日 15:23:15
下一篇 2024年3月31日 15:30:22

相关推荐

  • c语言rsa算法加密解密代码,用c实现rsa加密解密算法

    求RSA加密解密算法,c++源代码 解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。 你的程序直接运行结束了,所以你什么都看不见。你可以在你的MAIN函数最后一行加一句:getchar();或者 system(pause);另外如果你输出的内容是非可见字符,那你也看不见,你下个断点,看看变量的值就看见了。 我来说几句…

    2024年5月11日
    3900
  • 计算汉明距离c语言,c语言距离相关算法

    自然语言处理中距离计算总结 1、最我辑距离(minimum edit distance)是指从一个string到另一个string所需的最我辑步骤,包括:插入、删除、替换。而采用这三种编辑手段计算所得的距离又称为 Levenshtein distance 。 2、点到原点的距离公式是:√(x2-x1)2+(y2-y1)2。点到原点的距离,也就是点在二维或三维…

    2024年5月11日
    4500
  • c语言数据结构和算法,c语言数据结构和算法的区别

    数据结构与算法和c语言有什么关系吗? 1、C 计算机编程语言。(计算机可以识别,并且执行的程序就是靠这些高级计算机语言实现)数据结构指的是数据之间的相互关系,即数据的组织形式。 2、C语言是一种编程的语言,编程的语言有很多种。数据结构则是讲的是关于一些数据的理论知识。不管什么编程语言都能用到数据结构的知识,数据结构是程序设计基础又核心的知识。 3、C语言只是…

    2024年5月11日
    3100
  • 逆波兰式c语言,c语言逆波兰算法

    算术表达式转化成逆波兰式(C语言) // 中缀表达式转化为后缀表达式,仅支持加减乘除运算、操作数为1位十进制非负整数的表达式。 转为后缀表达式是“abcde/+*+ ”。a+b*(c+d/e) (a+(b*(c+(d/e)))通过根据运算符的优先级将所有算术单元括起来,该表达式变为:(a+(b*(c+(d/e))),然后转换后缀表达式。 内存引用错误,一般都…

    2024年5月11日
    2800
  • 图遍历的演示c语言,图的遍历c语言算法

    c语言图的遍历,邻接表存储,深度,广度优先遍历 1、(1)图的建立,按采用邻接表作为存储结构。(2)从指定顶点出发进行深度优先搜索遍历。(3)从指定顶点出发进行广度优先搜索遍历。 2、连通图的深度优先遍历类似与树的先根遍历 DFS结果是213546 ■用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所在行 行,时间复杂度为O(n7)。 3、/* 程序…

    2024年5月11日
    4000
  • 光流c语言算法,光流法代码

    c语言的开发步骤有哪些 开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。C语言程序可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。 C语言程序开发的六个步骤,包括问题定义、算法设计、编码、调试、测试和维护。问题定义 在开始编写C语言程序之前,首先需要明确问题的定…

    2024年5月10日
    3800
  • linux伙伴技术,简述linux伙伴算法

    背景知识之Linux背后的人 linux操作系统的创始人和主要设计者是:linustorvalds。根据查询相关公开信息显示,百度数据和官网都显示linux操作系统的创始人和主要设计者是:linustorvalds。 年10月,Linux之父芬兰赫尔辛基大学的学生Linus.Torvalds在Minix系统开发了大约一万行的代码,同时,将其发布到Comps.…

    2024年5月10日
    3800
  • java二进制转十进制算法,java 二进制转十进制

    java二进制转十进制 使用Integer.parseInt(String s, int radix) 。比如要将二进制数1000转换为十进制数.int i=Integer.parseInt(1000,2) ;System.out.println(i);输出结果为:8。 Integer.valueOf(1111111111111100, 2).shortVa…

    2024年5月10日
    3800
  • java用固定素数rsa算法传素数,java中素数

    RSA算法介绍 1、密码学中rsa的算法是加密算法。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。 2、RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目…

    2024年5月10日
    3100
  • java实现排列组合的递归思想,java实现排列组合算法

    在JAVA中什么是递归?有什么用? 1、Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。 2、递归的作用:递归算法可以解决一些通过递归定义的题目。首先需要明白什么是递归定义的题目,通俗一点来说就是一个大问题中蕴含着小问题,而小问题同时又与大问题的结构相同,…

    2024年5月10日
    3600

发表回复

登录后才能评论



关注微信