Java for You 数据结构 剑指Offer之二十八-字符串的排列

剑指Offer之二十八-字符串的排列

题目描述

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

输入描述

  • 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路

  1. 先不考虑是否出现重读字符,要对一个字符进行全排列,可以把第一个字符和后面的字符看成两部分
  1. 而第一个字符后面的字符又可以看成第一个字符和后面两部分,是一个递归过程
  1. 只要第一个字符的位置没有到达字符串的末尾就分别将第一个字符与后面的字符进行交换

注意

  • 第一个字符与后面的某个位置的字符发生交换后,需要再次发生交换,不然顺序就会被打乱
  • 举个例子,在字符串abc中,在把第一个字符看成是a,后面的字符b,c,看成是一个整体的时候,abc这个相对的顺序不能改变
  • 所以当a与b发生交换变成bac之后,需要再次交换两个字符,重新回到abc

代码实现

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3353.html

作者: 蜗牛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部