博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列 最详细的解题报告
阅读量:4323 次
发布时间:2019-06-06

本文共 1306 字,大约阅读时间需要 4 分钟。

题目大意:求任意集合的全排列

解题思路:假设数据存放在数组array[0,1...,length-1]中,首先固定下标为first=0的数,计算array[1,...,length-1]的全排列,依次类推,当first==length-1是,输出数组中的数据。当计算完array[1,...,length-1]的全排列后(此时first=0),然后需要将下标为1,...,length-1的所有数与first进行交换,即array中的每一个数都要放在first=0的位置,然后再依次类推。

 

具体算法(java版)

1 //将array数组中下标为m和n的数据进行交换 2     public static void swap(int[] array, int m, int n) { 3         int x = array[m]; 4         array[m] = array[n]; 5         array[n] = x; 6     } 7  8     //输出array数组中的数据 9     public static void output(int[] array) {10         for (int i = 0; i < array.length; i++) {11             System.out.print(array[i] + "\t");12         }13         System.out.println();14     }15 16     public static void permutation(int[] array, int first) {17         if (first == array.length - 1) {
// first已经到最后一个元素了,即所有的元素都已经固定了18 output(array); 19 } else {20 for (int i = first; i < array.length; i++) {21 swap(array, i, first); //交换22 permutation(array, first + 1); //first以前的元素都固定了,接下来固定first+123 swap(array, i, first); //还原24 }25 }26 }27 28 public static void main(String[] args) {29 int[] array = { 1, 2, 3 }; // 待排列的元素30 permutation(array, 0);31 }

 

转载于:https://www.cnblogs.com/pinxiong/p/4045379.html

你可能感兴趣的文章
Ubuntu菜鸟入门(五)—— 一些编程相关工具
查看>>
PHP开源搜索引擎
查看>>
12-FileZilla-响应:550 Permission denied
查看>>
ASP.NET MVC 3 扩展生成 HTML 的 Input 元素
查看>>
LeetCode 234. Palindrome Linked List
查看>>
编译HBase1.0.0-cdh5.4.2版本
查看>>
结构体指针
查看>>
迭代器
查看>>
Food HDU - 4292 (结点容量 拆点) Dinic
查看>>
Ubuntu安装Sun JDK及如何设置默认java JDK
查看>>
[经典算法] 排列组合-N元素集合的M元素子集
查看>>
Codeforces 279D The Minimum Number of Variables 状压dp
查看>>
打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!
查看>>
valgrind检测linux程序内存泄露
查看>>
Hadoop以及组件介绍
查看>>
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>