字典树排序(思路分析)
来源:互联网 发布:eve online for mac 编辑:程序博客网 时间:2024/06/05 16:21
字典树排序是全排列的一种典型例题
:将某一字符串的组成字母任意变换位置,变化的种类有多少种(按字典序输出)?
(注意:可能一个字母出现不止一次)
思路:
①求 变化的种类,可以用全排列的方法;
1.考虑用递归:模仿中序遍历、前序遍历代码格式;则想到要实现一个排列函数,在函数里调用自己。
2.排列函数:
2.1:首先想到要在循环中不断交换两个位置的值,还要确保能交换回来,并且在交换期间要遍历完所有情况:
于是将递归调用的函数写在两个swap中;
2.2:交换的起点要不断推移,因此不能把交换起点写死,而交换的另一个点应该是在起点(包含起点,因为本身不换也是一种)到终点之间,因此要把起点最为函数形参随递归调用而向前推移。
2.3:递归要有出口:如果交换的起点已经在最后一点,说明已经遍历完成,该反向生成各个字符串了。
2.4:此地鬼函数在主函数中被调用,交换起点应该设置为0,并用一个list作为形参以便进行字符串的添加。
②要按字典序输出,可以全排列完后最后进行整体排序;
③组成的字母可能会重复,考虑用list.contains(str1)判断是否包含,因此用ArrayList<String>来存储每个字符串。
代码:
public void Permutation(char[] arr, int i, ArrayList list) { if(i == arr.length - 1) { String str= String.valueOf(arr); if (!list.contains(str)) list.add(str); } else { for(int j = i; j < arr.length; ++j) { swap(arr, i, j); PermutationHelper(arr, i + 1, list); swap(arr, i, j); } }}
阅读全文
0 0
- 字典树排序(思路分析)
- Trie树|字典树(字符串排序)
- Phone List(字典树 or 排序)
- KMP(思路分析)
- 表排序(思路一)
- 表排序(思路二)
- 非中序遍历思路把二元查找树转变成排序的双向链表的分析
- 字符串排序(字典序)
- Trie树(字典树):应用于统计和排序
- CF512A:Fox And Names(拓扑排序 & 字典树)
- leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法
- 字典树trie分析报告
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 区块链原理学习之二-私钥公钥和地址
- MySQL 数据备份与还原
- thinkphp5.0 volist
- 关于CAShapeLayer的一些实用案例和技巧
- include动作与指令的区别
- 字典树排序(思路分析)
- NIO就这些知识吗?
- 多线程学习(一)什么是多线程?
- 解析Unicode编码和Java char
- mportError: No module named _tkinter, please install the python-tk package
- 路由协议——PDU的传播方式对比
- Android Multiple Selection Spinner
- 网易编程
- JavaScript高级程序设计(第1章 JavaScript简介)