【IT笔试面试题整理】字符串的组合
【试题描述】输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。
思路:同样是用递归求解。可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递归的终止条件n=0或m=0。
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。
这两种选择都很容易用递归实现。
【参考代码】
1 public static void combination(char[] arr,int begin,int number ,LinkedList<Character> result) 2 { 3 if(number == 0) 4 { 5 System.out.println(result.toString()); 6 return; 7 } 8 if( begin == arr.length) 9 return; 10 result.add(arr[begin]); 11 combination(arr,begin+1,number-1,result); 12 result.pollLast(); 13 combination(arr,begin+1,number,result); 14 15 } 16 public static void combination(char[] arr) 17 { 18 if(arr.length == 0) 19 return; 20 LinkedList<Character> list = new LinkedList<Character>(); 21 for(int i=1;i<=arr.length;i++) 22 combination(arr,0,i,list); 23 }
转载于:https://www.cnblogs.com/WayneZeng/archive/2013/04/11/3014882.html
【IT笔试面试题整理】字符串的组合相关推荐
- 网易历届笔试面试题整理大全
整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题 常见算法面试题 数据库常见面试题 操作系统常见面试题 C/C++常见面试题 大数据常见面试 ...
- 【IT笔试面试题整理】字符串的排列
[试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...
- 【IT笔试面试题整理】字符串转数组+数组转字符串
[试题描述]定义一个函数,字符串转数组数组转字符串 [参考代码] 1 public static int strToInt(String str) 2 { 3 int i = 0, num = 0; ...
- 【IT笔试面试题整理】不用加减乘除做加法
[试题描述]写一个函数,求两个整数的和,要求在函数体内不得使用加减乘除四则运算符合. 基本思路是这样的: int A, B;A&B //看哪几位有进位A^B //不带进位加 考虑二进制加法的过 ...
- 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
[试题描述]: 给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...
- 【IT笔试面试题整理】连续子数组的最大和
[试题描述]输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n). 思路:当我们加上一个正数时,和会增加:当我们加上一个 ...
- 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂 ...
- 【IT笔试面试题整理】位操作
如何准备: Bit manipulation can be a scary thing to many candidates, but it doesn't need to be! If you're ...
- 【IT笔试面试题整理】给定二叉树,给每层生成一个链表
[试题描述]定义一个函数,给定二叉树,给每层生成一个链表 We can do a simple level by level traversal of the tree, with a slight ...
最新文章
- phpstorm 关闭多余变量提示
- Makefile_03:Makefile介绍(作用、例子、原理)
- mybatis学习3之分页的实现
- 【温故知新】CSS学习笔记(后代和子代选择器)
- mongodb维护常用命令
- 【DFS】LeetCode 40. Combination Sum II
- Android Camera数据流分析全程记录(overlay方式二)
- mysql5.7.19zip,mysql5.7.19zip详细安装过程和配置
- 《Java高并发编程详解:多线程与架构设计》笔记(一)
- 网页在线沟通工具,网页即时聊天工具-ttkefu完全免费电话呼叫流程图
- Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
- python爬虫:xpath解析
- wpf 监听退出事件_【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
- STM32:SPI驱动ADXL345
- 云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例
- VMware Fusion安装cloudera manager
- 司美格鲁肽进入临床竞速期,减肥“神药”生于偶然、火于乱象?
- 一文彻底理解评分卡开发中——Y的确定(Vintage分析、滚动率分析等)
- mae python实现_使用Python进行机器学习:从0到1,构建回归模型(附完整教程)
- Nette框架:第一印象
热门文章
- SPringMVC使用总结
- Mybatis使用总结
- adcclk最大_STM32 ADC转换时间
- python判断文件是否为空文件对象_判断Python对象是不是为文件对象的方法有哪些...
- 002_支持并发的内部类饿汉单例
- 编写时钟aplet程序java,编写时钟 Applet 程序
- openstack管理员手册下载_城市绿心森林公园app下载-城市绿心森林公园客户端下载v1.1 安卓版...
- feign 第一次调用超时_Feign ,3步搞定 HTTP 请求
- BAT无线工程师面试流程详细解析
- SVN服务端的搭建及客户端连接(云上搭建服务端)