面试题28:字符串的排列
来源:互联网 发布:淘宝淘金币哪里可以买 编辑:程序博客网 时间:2024/05/17 03:55
面试题28:字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
代码:输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
package offer;import java.util.ArrayList;import java.util.Collections;/** * 面试题28:字符串的排列 * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 */public class _28_full_permutation { public static void main(String[] args){ Solution28 solution28 = new Solution28(); String str="abc"; ArrayList<String> arrayList =solution28.Permutation(str); for(String s:arrayList){ System.out.print(s+"、"); } }}class Solution28 { public ArrayList<String> Permutation(String str) { ArrayList<String> arrayList = new ArrayList<String>(); if(str==null){ return arrayList; } char[] chars = str.toCharArray(); getFullPermutation(arrayList,chars,0); Collections.sort(arrayList); return arrayList; } public void getFullPermutation(ArrayList<String> arrayList,char[] chars,int currentIndex){ if(currentIndex==chars.length-1){ arrayList.add(String.valueOf(chars)); return; } for(int i=currentIndex;i<chars.length;i++){ if(repetition(chars, currentIndex, i)){ char tmp=chars[currentIndex];//第currentIndex个元素与右侧任一元素交换 chars[currentIndex]=chars[i]; chars[i]=tmp; getFullPermutation(arrayList,chars,currentIndex+1);//第currentIndex个元素不断与currentIndex的右侧元素交换 chars[i]=chars[currentIndex];//第currentIndex个元素与右侧任一元素再换回来 chars[currentIndex]=tmp; } } } public boolean repetition(char[] str,int currentIndex,int slip){ while (currentIndex<slip) { //扫描当前点与待交换点之间,待交换的是否有重复元素 if(str[currentIndex]==str[slip]){ return false; } currentIndex++; } return true; }}
0 0
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28 字符串的全排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28—字符串的排列
- 面试题28:字符串排列
- 程序员面试题精选(28):字符串的排列
- 程序员面试题精选100题(28)-字符串的排列
- 微软,Google面试题 (28) —— 字符串的排列
- 程序员面试题精选100题(28)-字符串的排列
- 好人一生平安
- java-collections
- LabVIEW串口通信全方位了解
- Spring_23-24使用 JdbcTemplate和JdbcDaoSupport和NamedParameterJdbcTemplate
- (五)阿里巴巴JAVA编程规范之安全规约
- 面试题28:字符串的排列
- eclipse支持C++11
- oj2422: C语言习题 n个数逆序
- java书籍
- SQL for ElasticSearch—Crate.io简介
- 23种设计模式(2):工厂方法模式
- PHP数组的查找算法
- 506. Relative Ranks
- 面试题29:数组中出现次数超过一半的数字