博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试百题053——字符串的排列
阅读量:4320 次
发布时间:2019-06-06

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

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

分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。

我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a的排列。

public class test{ public static void listAllSequence(String str) {  char[] chs=str.toCharArray();  int len=str.length();  listAll(chs, 0, len-1);   }  private static void listAll(char[] c,int p,int r) {  if (p >= r)  {   for (char i : c)    System.out.print(i);   System.out.println();  }  else  {   for (int i = p; i <= r; i++)   {    char temp = c[p];    c[p] = c[i];    c[i] = temp;    listAll(c, p + 1, r);    c[i] = c[p];    c[p] = temp;   }  } }         public static void main(String[] args)         {            listAllSequence("sample");         }}

转载于:https://www.cnblogs.com/sankuaiqian/archive/2012/10/07/2714174.html

你可能感兴趣的文章
《小强升职记——时间管理故事书》读书笔记
查看>>
Alpha 冲刺(3/10)
查看>>
Kaldi中的Chain模型
查看>>
spring中的ResourceBundleMessageSource使用和测试示例
查看>>
css规范 - bem
查看>>
电梯调度程序的UI设计
查看>>
转自 zera php中extends和implements的区别
查看>>
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决...
查看>>
MTK android 设置里 "关于手机" 信息参数修改
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>