面试题28:字符串的排列
2015-07-03 15:52
253 查看
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来
的所有字符串abc、acb、bac、bca、cab和cba。
参见LeetCode-Permutations。
本题扩展:
如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办?
还是输入三个字符a、b、c,则它们的组合有a、b、c、ab、ac、bc、abc,当交换字符串中的两个字符时,虽然能得到两个不同的排列,但
却是同一个组合。比如ab和ba是不同的排列,但只算一个组合。
如果输入n个字符,则这n个字符能构成长度为1的组合,长度为2的组合、......、长度为n的组合。在求n个字符的长度为m(1<=m<=n)的组合的时候,我们
把这个n个字符分成两部分:第一个字符和其余的所有字符。如果组合里包含第一个字符,则下一步在剩余的字符里选取m-1个字符,如果组合里不包含第一个字符,
则下一步在剩余的n-1个字符里选取m个字符。也就是说,我们可以把求n个字符组成长度为m的组合的问题分解成两个子问题,分别求n-1个字符串中长度为m-1的
组合,以及求n-1个字符的长度为m的组合。这两个子问题都可以用递归的方式解决。
的所有字符串abc、acb、bac、bca、cab和cba。
参见LeetCode-Permutations。
本题扩展:
如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办?
还是输入三个字符a、b、c,则它们的组合有a、b、c、ab、ac、bc、abc,当交换字符串中的两个字符时,虽然能得到两个不同的排列,但
却是同一个组合。比如ab和ba是不同的排列,但只算一个组合。
如果输入n个字符,则这n个字符能构成长度为1的组合,长度为2的组合、......、长度为n的组合。在求n个字符的长度为m(1<=m<=n)的组合的时候,我们
把这个n个字符分成两部分:第一个字符和其余的所有字符。如果组合里包含第一个字符,则下一步在剩余的字符里选取m-1个字符,如果组合里不包含第一个字符,
则下一步在剩余的n-1个字符里选取m个字符。也就是说,我们可以把求n个字符组成长度为m的组合的问题分解成两个子问题,分别求n-1个字符串中长度为m-1的
组合,以及求n-1个字符的长度为m的组合。这两个子问题都可以用递归的方式解决。
相关文章推荐
- 概率---面试题
- 面试题24:二叉搜索树的后序遍历序列
- 黑马程序员-java基础-常用的类以及它的方法
- 黑马程序员-java基础-集合
- 黑马程序员---泛型,Collections,Arrays
- 黑马程序员——java基础---面向对象
- 面试题23:从上往下打印二叉树
- 面试
- 面试题22:栈的压入、弹出序列
- 【黑马程序员】Java学习笔记之继承(二)(面向对象)
- 最近开始码农
- iOS经典面试题(转)
- 黑马程序员——java基础---流程控制、函数、数组
- 黑马程序员--java基础学习笔记4
- 做好这五点,变身职场达人
- 【数据分析面试题】一个 面试题,我的回答
- 黑马程序员----OC学习之方法
- 面试题20:顺时针打印矩阵
- 黑马程序员——Java基础---异常
- iOS 面试题之多线程是什么?