【剑指offer】之字符串的排列
2015-12-15 09:23
232 查看
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
java代码实现:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
java代码实现:
/** * 方法描述:以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a, * 求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交 * 换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一 * 位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c * 仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来 * 。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符 * c,求后面两个字符b、a的排列。 */ private static void permutation(String str) { char[] chars = getChars(str); permutation(chars,0); } private static void permutation(char []chars, int index) { if(chars.length <0 ) return ; if(index == chars.length-1) { System.out.println(chars); } else { for(int i=index;i<chars.length;i++) { //第一个位置和后面的字符串中的字符进行交换 char temp = chars[i]; chars[i] = chars[index]; chars[index] = temp; //后面的子字符串进行递归调换 permutation(chars, index+1); //恢复原来交换前的位置 temp = chars[i]; chars[i] = chars[index]; chars[index] = temp; } } } private static char[] getChars(String str) { char[] temp = new char[str.length()]; for(int i=0;i<str.length();i++) { temp[i] = str.charAt(i); } return temp; }
相关文章推荐
- three.js学习计划(一)
- leetcode Remove Nth Node From End of List
- 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本
- jquery九宫格抽奖转盘插件
- Jquery easyui从零单排之datagrid单行数据删除
- javascript用法
- 9个超绚丽的HTML5 3D图片动画特效
- maven打包在MANIFEST.MF文件中增加属性
- js中json字符串的处理
- Json字符串解析不了,解析对象为null
- js编写“贪吃蛇”的小游戏
- Javascript闭包函数快速上手
- Javascript闭包函数快速上手
- NameNode 自动重启问题排查
- HTMl5的存储方式sessionStorage和localStorage详解
- Javascript闭包函数快速上手
- javascript实现网页端解压并查看zip文件
- JS 数组排序
- 写 CSS 时要避免的几个地方
- PLSQL入门:cursor传参,loop fetch使用,if使用,单引号字符表示