用递归实现排列组合(java代码)
来源:互联网 发布:java开发客户端软件 编辑:程序博客网 时间:2024/05/16 08:31
全排列递归算法思想:假设求abcdefg的全排列,先将第一个字母确定为a,然后求bcdefg的全排列就行了,然后将a与b交换位置,重复上述过程,直到a和g交换。
全组合递归算法思想:假设求abcdefg的全组合,分两种情况,一、将a放入组合中,再求出剩下的bcdefg的组合。二、不将a放入组合,求出剩下的bcdefg的组合。
下面看代码:
package practise;public class PermutationAndCombination{ private static char[] charArray; private static boolean[] signs; private static boolean newLine = false; /** * 输出s的全排列 * @param s */ public static void printPermutation(String s) { if (s == null) return; charArray = s.toCharArray(); printPmt(0, charArray.length - 1); } /** * 打印charArray从low到high的所有排列 * @param low * @param high */ private static void printPmt(int low, int high) { if (low >= high) { print(charArray[low] + "\n"); newLine = true; } else { for (int i = low; i <= high; i++) { exchChars(low, i); if (newLine) { printFromHead(0, low - 1); newLine = false; } print(charArray[low]); printPmt(low + 1, high); exchChars(low, i); } } } /** * 输出s的全组合 * @param s */ public static void printCombination(String s) { if (s == null) return; charArray = s.toCharArray(); signs = new boolean[charArray.length]; printCombination(0, charArray.length - 1); } /** * @param low * @param high */ private static void printCombination(int low, int high) { if(low > high) { for(int i = 0;i < charArray.length;i++) { if(signs[i]) print(charArray[i]); } print("\n"); }else { //输出有第一个字符的组合 signs[low] = true; printCombination(low + 1,high); //输出没有有第一个字符的组合 signs[low] = false; printCombination(low + 1,high); } } /** * 从i打印到j * @param i */ private static void printFromHead(int i, int j) { for (int k = i; k <= j; k++) { print(charArray[k]); } } /** * 交换charArray索引为j,k的字符 * @param j * @param k */ private static void exchChars(int j, int k) { if (j == k) return; char temp = charArray[j]; charArray[j] = charArray[k]; charArray[k] = temp; } private static void print(Object o) { System.out.print(o); } private static void println(Object o) { System.out.println(o); }}
0 0
- 用递归实现排列组合(java代码)
- java 排列组合(递归实现)
- Java实现排列组合--递归
- 用递归实现排列组合
- 用递归实现排列组合
- 用递归实现排列组合
- java排列组合算法代码实现
- java排列组合算法代码实现
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- java 递归 实现数字的排列组合
- 递归实现数字排列组合
- 递归实现排列组合
- 排列组合的递归实现
- 递归实现排列组合问题
- 排列组合递归算法 java
- Java 非递归实现的排列组合中的平均分组问题
- 用递归进行排列组合
- 排列组合 用递归
- 6. ZigZag Conversion
- guava cache 代码分析3 get(key) -- 7
- jsp 自定义标签
- NSObject的load和initialize方法
- Unity3d 编写编辑器自定义插件(1)
- 用递归实现排列组合(java代码)
- 分布式集群系统下的高可用session解决方案
- JAVA反射获取类名,方法名,属性及构造方法
- JSP自定义标签(一) 树形下拉选择菜单
- Android知识结构
- leetcode刷题系列C++-next permutation
- magento优惠码提交不了
- Arrays
- 基于redis分布式缓存实现(新浪微博案例)