【剑指offer】字符串的排列
来源:互联网 发布:txt转mobi for mac 编辑:程序博客网 时间:2024/05/16 04:41
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:全排列问题
例如:输入字符串abc,先固定a,求bc的全排列;再把a和b交换位置,固定b,求ac的全排列;再把a和c交换位置,固定c,求ba的全排列
每个子问题的全排列都可以递归去求,直到只有一个元素为止
注意一:按字典顺序排序
注意二:去除重复
import java.util.*;public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> result = new ArrayList(); if(str ==null) { return result; } //字符串转换为字符串数组 char[] str_arr = str.toCharArray(); permu(str_arr,result,0,str_arr.length-1); //按字典顺序打印输出 Collections.sort(result); return result; } public void permu(char[] str,ArrayList<String> result,int from,int to) { if(from==to) { String complete = new String(str); result.add(complete); } else{ for(int i=from;i<=to;i++) { //去除重复 if((i!=from)&&(str[i]==str[from])) { continue; } swap(str,i,from); permu(str,result,from+1,to); swap(str,i,from); } } } //交换顺序 public void swap(char[] str,int begin,int end) { char temp = str[begin]; str[begin]=str[end]; str[end]=temp; } }
0 0
- 【剑指offer】字符串的排列
- 剑指offer--字符串的排列
- 《剑指offer》字符串的排列
- 【剑指Offer】字符串的排列
- 剑指offer--字符串的排列
- 剑指offer:字符串的排列
- 剑指offer:字符串的排列
- 剑指offer:字符串的排列
- [剑指offer]字符串的排列
- 《剑指offer》-字符串的排列
- 剑指offer|字符串的排列
- 【剑指offer】字符串的排列
- 《剑指offer》字符串的排列
- 剑指Offer:字符串的排列
- 【剑指offer】字符串的排列
- 剑指offer-字符串的排列
- 剑指offer 字符串的排列
- 剑指offer 字符串的排列
- 多线程编程——线程同步方法
- 用360加固app后上传需要重新签名
- AsyncTask原理
- git 与 github
- 多线程编程——4种线程池
- 【剑指offer】字符串的排列
- 企业内部用独立的app软件沟通有什么好处?
- Android系统架构及启动流程
- 递归&迭代
- 执行命令
- Android Context 是什么?
- [Android] 浅析总结 AS 中 Gradle 配置运行
- JDBC 事务处理
- oracle系统包—-dbms_output用法