[算法学习]Java实现字符串全排列
2016-01-25 13:42
561 查看
思路:这里用到递归的方式完成字符数据的全排列,递归确实很方便。看似没用到辅助空间,实际上却是消耗了栈空间(“递归栈”),递归用起来也不是那么简单,解决问题用递归的时候,一定要关注到两个零界点,怎么开始和怎么结束。
代码
输出
代码
[code]/** * 实现字符数组全排列 * * @author kesar * */ public class TestPermute { public static void permute(String str) { char[] ca = str.toCharArray(); permute(ca, 0, ca.length - 1); } /** * 核心方法:用了递归的方式完成全排列,用递归的思路是要怎么开始,怎么结束,想想这两个临界点。 * @param str * @param low * @param hight */ public static void permute(char[] str, int low, int hight) { if (low == hight) { // 递归结束 for (int i = 0; i <= hight; i++) System.out.print(str[i]); System.out.println(); } else { for (int i = low; i <= hight; i++) { //首先交换开始的字符位置(这里交换字符值不能用异或,会出现奇怪字符) //这个交换是思路的关键,因为不想用辅助空间(一用就很多浪费),所以才选择交换位置。 char temp = str[low]; str[low] = str[i]; str[i] = temp; // 递归开始 permute(str, low + 1, hight); } } } /** * @param args */ public static void main(String[] args) { permute("abc"); } }
输出
[code]abc acb cab cba abc acb
相关文章推荐
- Java中的对象和对象引用实例浅析
- Java JVM使用哪种编码格式
- java反编译插件jadclipse安装
- spring MVC配置详解
- java基础篇--07<java异常处理>
- JAVA中获取项目文件路径[转载的一篇关于 相对路径 的文章]
- java正则表达式的匹配
- Spring中bean三种注解方式。
- Java 高级类(下) —— 内部类和匿名类
- JAVA压缩图片并打成ZIP
- java不可变类中静态成员变量可以改变吗
- activemq的配置与结合spring使用
- java正则去掉小数点后多余0
- 华为oj题目(java版)
- java基础之& 和 && 的差别
- Java题,class A { static int x; } class B { A a = new A(); a.x=1; }错在哪
- java(二十一)集合 ArrayList
- eclipse快捷键
- 在 Eclipse 中使用 PHP
- java(二十)多态