博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指 Offer》——27、字符串的排列
阅读量:2343 次
发布时间:2019-05-10

本文共 1367 字,大约阅读时间需要 4 分钟。

1. 本题知识点

字符串

2. 题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则按字典序打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。

3. 解题思路

要求字符串的全排列,可以看成两步:

  1. 求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换。
  2. 固定这个字符,求后面所有字符的排列。

显然这是典型的递归思路,递归出口就是对最后一个字符固定的时候。

在这里插入图片描述

4. 代码

public class Solution {
ArrayList
result = new ArrayList<>(); /** * 返回字符串的全排序结果 * @param str * @return */ public ArrayList
permutation(String str) {
// 字符串为空时 if (str == null || str.length() == 0) {
return result; } permutation(str.toCharArray(), 0); // 从小到大排序 Collections.sort(result); return result; } public void permutation(char[] str, int begin) {
// 对最后一个字符固定的时候,退出递归 if (begin == str.length - 1) {
// 去重 String s = String.valueOf(str); if (!result.contains(s)) {
result.add(s); } } else {
for (int i = begin; i < str.length; i++) {
// 求所有可能出现在第一个位置的字符 swap(str, begin, i); // 求后面所有字符的排列 permutation(str, begin + 1); // 还原 swap(str, begin, i); } } } public void swap(char[] str, int i, int j) {
char temp = str[i]; str[i] = str[j]; str[j] = temp; }}

转载地址:http://abjvb.baihongyu.com/

你可能感兴趣的文章
IE8 9 ajax no-transport ajax 问题
查看>>
oracle 启动dbconsole
查看>>
entity-framework 6解决方案中多个项目使用
查看>>
ios基础
查看>>
unity3d
查看>>
metronic 1.5
查看>>
unity3d 4 assert store
查看>>
tab bar control 注意事项
查看>>
sql优化部分总结
查看>>
IDEA运行时动态加载页面
查看>>
UML总结(对九种图的认识和如何使用Rational Rose 画图)
查看>>
js遍历输出map
查看>>
easeui分页
查看>>
20个非常有用的Java程序片段
查看>>
Enterprise Architect使用教程
查看>>
Enterprise Architect 生成项目类图
查看>>
浅入深出 MySQL 中事务的实现
查看>>
UML总结(对九种图的认识和如何使用Rational Rose 画图)
查看>>
Java中使用HttpRequest获取用户真实IP地址端口
查看>>
easyUI下拉列表点击事件的使用
查看>>