剑指offer_输入一个字符串,按字典序打印出该字符串中字符的所有排列
字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
解题思路:
1.列出所有字符串用递归求解。
对于n个字符串的排列问题。如果能生成n - 1个元素的全部排列结果,就能生成n个元素的全部排列结果。
以abc为例:
F(String str ,int start ,int end)
F(abc,start,end)=F(abc,start+1,end)+F(bac,start+1,end)+F(cba,start+1,end)
F(abc,start,end)=abc (start==end)
2.结果按字典顺序输出,这就用到了强大的TreeSet了,直接排好序。又因为题目中要求返回ArrayList类型,故将TreeSet中元素全部加入ArrayList中
代码:
import java.util.*;
public class Solution {public ArrayList<String> Permutation(String str) {ArrayList<String> result = new ArrayList<String>();//根据返回类型需要if(str==null||str.length()==0){return result;}char[] chars = str.toCharArray();TreeSet<String> res = new TreeSet<String>(); //用于排序输出getResult(chars,0,str.length()-1,res);result.addAll(res) ;//添加到ArrayListreturn result ;}public void getResult(char[] chars,int start,int end,TreeSet<String> res){if(start==end){res.add(String.valueOf(chars));}else{for(int i=start;i<=end;i++){swap(chars,start,i);//换一位getResult(chars,start+1,end,res);//递归swap(chars,start,i);//换回来,保证下次换位是正确的}}}public void swap(char[] chars,int a,int b){if(a==b){//因为会出现原位置与原位置交换,直接空即可}else{char temp = chars[a];chars[a]=chars[b];chars[b]=temp;}}
}
转载于:https://www.cnblogs.com/lingongheng/p/6444228.html
剑指offer_输入一个字符串,按字典序打印出该字符串中字符的所有排列相关推荐
- 【20190405】算法-输入一个字符串,按字典序打印出该字符串中字符的所有排列
方法一:利用递归 利用递归求全排列的过程真的很难理解,先把代码贴上来吧 function Permutation(str) {// write code hereif(!str){return str ...
- 剑指offer_输入n个整数,找出其中最小的K个数
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 本题无非就是排序,取前K个值.但选什么排序算法呢? ...
- 剑指offer_第19题_顺时针打印矩阵_Python
题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- java从键盘输入数据斐波那契数_从键盘输入一个正整数n,打印出斐波那契数列的前n个元素...
import java.util.*; public class Test { public static void main(String[] args){ Scanner in = new Sca ...
- 《剑指Offer》 从上往下打印出二叉树
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 其实就是层序遍历,设置一个TreeNode*类型的队列s,用来保存二叉树层序遍历的节点,因为队列是先进先出,所以很好地控制了 ...
- java剑指offer_剑指offer题目java实现
Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 1 packageProblem2;2 3 public classSingletonClass {4 ...
- JAVA实现输入一个整数,输出该数二进制表示中1的个数(《剑指offer》)
题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 这个题目有个比较有意思并且被公认的解法,我就先贴答案吧: public class Solution {public int ...
- 剑指offer_两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路: 遇到这种题目,瞬间想到HashMap- 用一个HashMap依次记录第一个链表的结点: 遍历第二个链表结点,一旦在HashMap中找到, ...
- 【Java算法题】剑指offer_数据结构之03队列栈
前言 刷题链接: https://www.nowcoder.com/exam/oj/ta?page=2&tpId=13&type=265 原定于5.30写完队列&栈,超时了14 ...
- 剑指offer_第一个只出现一次的字符
题目描述 在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置. 时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在 ...
最新文章
- 集结阿里云数据库最强阵容 DTCC 2019 八大亮点抢先看
- springcloud完整项目_.net core+Spring Cloud学习之路 一
- deepin linux桌面设置,在Deepin Linux桌面创建快捷方式
- aes256 加密后的长度_视频会议Zoom 5.0版本重大更新,增强加密功能提供更多安全选项...
- [Vue.js] 路由 -- 前端路由
- 标题在优化排名的写法
- Python基础===使用virtualenv创建一个新的运行环境
- 使用Jasypt加密spring boot应用配置文件的敏感信息
- 如何PDF转Word文档?快把这些方法收好
- python写给初学者的一封信
- HL7协议介绍(一)
- String常用方法汇总
- Thinkpad E430 移除网卡白名单
- 清除浏览器痕迹(RunDll32.exe)
- 编程”灵魂之心“之消息机制
- 我的朋友老曹,居然用数据工具搞了这么多事
- iNFTnews丨世界首个元宇宙时装周将在Decentraland举办
- 关于RFID电感耦合方式的射频前端工作原理,你了解吗?
- 2020 CSP-J2题目
- 【oracle】 字段属性为 date 的相关操作
热门文章
- 系统计算机名是中文,导致VisualSVN安装失败
- 汝把公司搞死了,不批汝批谁?
- Ubuntu用Apache2快速搭建一个HTTP文件服务器
- 继承与data member之单一继承
- 3使用技巧_盆栽金钱树,平时使用“3个”技巧,叶子稠密、基部冒新芽
- C# 自定义网格 dataGridView 三角箭头移动 获取当前行列序号 滚动条显示改变 滚动条定位索引
- camunda 流程执行追踪_从Activiti分裂而来的camunda BPM
- python 转成摩尔斯电码_【无线电史话】比莫尔斯电码更直观 | 1919年的护林员通过Myer码传递信息...
- java方法介绍_Java 方法介绍
- python和tableau优缺点_matplotlib和Tableau之间哪一个最好?