字符全排列算法
来源:互联网 发布:数据帧 格式 编辑:程序博客网 时间:2024/06/05 02:17
递归思想:
1:最少的情况是一个字符全排列,直接就是。
2:两个字符全排列的时候,两个要做的是互换位置,相当于当前串首字符和整个arr尾字符互换,两个字母时一次即可。
3:三个字符的时候,第一个字母位置不变,剩下两个字母执行第二步。同时每个字符都有一次机会放在最左端(第一位)。循环执行当前串首字符和整个arr尾字符互换操作。
4:大于三个字符(n)的也是保证每个字符都有机会放在最左端,同时剩余的字符执行fun(n-1)
定义属性:
static char[] arrChar = {'c','a','t','s'};static int size = arrChar.length;
main:
doAnagram(size);
递归方法:
public static void doAnagram(int newSize){
//TODO:递归实现
//1:边界,递归结束
//2:递归调用
//3:其他操作
}
显示单词所有组合:
public static void display(char[] arr){ //TODO:打印字符串。}
当前串首字符和整个arr尾字符互换:
public static void rotate(int newSize){//TODO:将每次递归的数组的首字符和原始数组的尾字符调换}
完整代码:
public class Anagram { static char[] arrChar = {'c','a','t','s'}; static int size = arrChar.length; public static void main(String[] args) { doAnagram(size); } public static void doAnagram(int newSize){ if (newSize == 1){ displayWord(arrChar); }else { for (int j=0;j<newSize;j++){ doAnagram(newSize - 1); rotate(newSize); } } } /** * 显示所有单词组合 * */ public static void displayWord(char[] arr){ for (char ch:arr){ System.out.print(ch); } System.out.println(""); } /** *newSize是递归中的数字 * * */ public static void rotate(int newSize){ int j; int position = size - newSize; char temp = arrChar[position]; for (j=position+1;j<size;j++){ arrChar[j-1] = arrChar[j];//left moved } arrChar[j-1] = temp;//put first on right }}
- 字符全排列算法
- 算法题--字符排列(全排列)
- 字符全排列算法及原理
- 字符全排列的递归算法
- [算法设计-字符的全排列问题]
- 求字符数组的全排列算法
- js实现字符全排列算法
- 算法练习----java字符全排列
- 数组内字符的全排列算法
- 字符或数字全排列算法
- 字符的全排列
- 字符全排列
- 字符全排列Permutation
- 字符全排列
- 字符全排列产生器
- 字符的全排列
- 字符全排列
- 字符全排列
- VS Installer 多个安装包程序打包安装 .
- 指针和引用的比较小结
- 基于 Jenkins 快速搭建持续集成环境
- Linux下Redis安装详解
- android Notification
- 字符全排列算法
- 算法学习笔记(一):桶式排序及其稳定性
- Delphi Web Service(1)
- raw和assets文件的使用
- chrome font-size<12px无效
- B. Command Line Arguments
- 泛型
- HTTP协议之缓存
- 【风宇冲】Unity3D教程宝典之Shader篇:第二十讲法线贴图