字符串的排列
2017-07-01 15:30
267 查看
1.题目描述:输入一个字符串,按字典序打印出该字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
2.思路分析
本题考察两个点
1)全排列问题,就是将每一位固定,后面的字符全排列,即可得到。如123–》第一位固定其他的每一位交换得到123、132–》第二位固定其他的交换得到213、231–》第三位固定312、321。最终得到{123,132,213,231,312,321}
2)进行字典排序,所谓字典排序就和查字典一样,先查询到值较小开头的字符串123、132.然后查询到213、231以此类推。
3.代码如下:
4.结果
注:本题来自剑指offer,而且为很多公司面试的常考题型。
2.思路分析
本题考察两个点
1)全排列问题,就是将每一位固定,后面的字符全排列,即可得到。如123–》第一位固定其他的每一位交换得到123、132–》第二位固定其他的交换得到213、231–》第三位固定312、321。最终得到{123,132,213,231,312,321}
2)进行字典排序,所谓字典排序就和查字典一样,先查询到值较小开头的字符串123、132.然后查询到213、231以此类推。
3.代码如下:
package stringOrder; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; public class Solution { /***先进行全排列全排列就是从第一位开始,首先固定一位其余各位进行全排列, *之后利用Collection.sort()进行字典排序 * @param str * @return */ public static ArrayList<String> Permutation(String str){ ArrayList<String> res = new ArrayList<String>(); if(str==null||str.length()==0) return res; HashSet<String> set = new HashSet<String>(); permutation(set,str.toCharArray(),0); res.addAll(set); Collections.sort(res); return res; } static void permutation(HashSet<String> set,char[] ch,int k){ if(k==ch.length){ set.add(new String(ch)); return; } for(int i=k;i<ch.length;i++){ swap(ch,k,i); permutation(set,ch,k+1); swap(ch,k,i); } } static void swap(char[] c,int i,int j){ char m; m= c[i]; c[i]=c[j]; c[j]=m; } public static void main(String[] args){ String str = "123"; System.out.println(Permutation(str)); } }
4.结果
注:本题来自剑指offer,而且为很多公司面试的常考题型。
相关文章推荐
- 字符串的全排列和组合算法
- 【面试题028】字符串的排列
- 字符串的排列
- 字符串的排列组合问题
- 软件设计艺术大师基本功--输出字符串中各个字符的组合(不是排列)
- 字符串的全排列和组合算法
- 递归实现将参数字符串中的字符反向排列,要求不能使用C函数库中的字符串操作函数
- 字符串倒续排列的小程序
- 剑指offer:字符串排列
- 九度oj 题目1369:字符串的排列
- 输入一个字符串,打印出该字符串中字符的所有排列
- 字符串的排列和组合
- 剑指Offer面试题28(java版):字符串的排列
- 字符串逆序排列
- 剑指Offer----面试题28:字符串的排列 & 去重
- [九度oj]题目1369:字符串的排列
- 一个字符串排列的小算法
- 初学c语言--Linux下的gets命令,对n个数的顺序排列 计算字符串里的单词数 n个数里取m的方法 杨辉三角
- 字符串全排列
- 将参数字符串中的字符反向排列(递归实现),可变参数列表函数实现