【试题描述】输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入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笔试面试题整理】字符串的组合相关推荐

  1. 网易历届笔试面试题整理大全

    整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题    常见算法面试题   数据库常见面试题  操作系统常见面试题   C/C++常见面试题  大数据常见面试   ...

  2. 【IT笔试面试题整理】字符串的排列

    [试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...

  3. 【IT笔试面试题整理】字符串转数组+数组转字符串

    [试题描述]定义一个函数,字符串转数组数组转字符串 [参考代码] 1 public static int strToInt(String str) 2 { 3 int i = 0, num = 0; ...

  4. 【IT笔试面试题整理】不用加减乘除做加法

    [试题描述]写一个函数,求两个整数的和,要求在函数体内不得使用加减乘除四则运算符合. 基本思路是这样的: int A, B;A&B //看哪几位有进位A^B //不带进位加 考虑二进制加法的过 ...

  5. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  6. 【IT笔试面试题整理】连续子数组的最大和

    [试题描述]输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n). 思路:当我们加上一个正数时,和会增加:当我们加上一个 ...

  7. 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]

    [来源]:腾讯2013实习生笔试   给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂 ...

  8. 【IT笔试面试题整理】位操作

    如何准备: Bit manipulation can be a scary thing to many candidates, but it doesn't need to be! If you're ...

  9. 【IT笔试面试题整理】给定二叉树,给每层生成一个链表

    [试题描述]定义一个函数,给定二叉树,给每层生成一个链表 We can do a simple level by level traversal of the tree, with a slight ...

最新文章

  1. phpstorm 关闭多余变量提示
  2. Makefile_03:Makefile介绍(作用、例子、原理)
  3. mybatis学习3之分页的实现
  4. 【温故知新】CSS学习笔记(后代和子代选择器)
  5. mongodb维护常用命令
  6. 【DFS】LeetCode 40. Combination Sum II
  7. Android Camera数据流分析全程记录(overlay方式二)
  8. mysql5.7.19zip,mysql5.7.19zip详细安装过程和配置
  9. 《Java高并发编程详解:多线程与架构设计》笔记(一)
  10. 网页在线沟通工具,网页即时聊天工具-ttkefu完全免费电话呼叫流程图
  11. Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
  12. python爬虫:xpath解析
  13. wpf 监听退出事件_【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
  14. STM32:SPI驱动ADXL345
  15. 云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例
  16. VMware Fusion安装cloudera manager
  17. 司美格鲁肽进入临床竞速期,减肥“神药”生于偶然、火于乱象?
  18. 一文彻底理解评分卡开发中——Y的确定(Vintage分析、滚动率分析等)
  19. mae python实现_使用Python进行机器学习:从0到1,构建回归模型(附完整教程)
  20. Nette框架:第一印象

热门文章

  1. SPringMVC使用总结
  2. Mybatis使用总结
  3. adcclk最大_STM32 ADC转换时间
  4. python判断文件是否为空文件对象_判断Python对象是不是为文件对象的方法有哪些...
  5. 002_支持并发的内部类饿汉单例
  6. 编写时钟aplet程序java,编写时钟 Applet 程序
  7. openstack管理员手册下载_城市绿心森林公园app下载-城市绿心森林公园客户端下载v1.1 安卓版...
  8. feign 第一次调用超时_Feign ,3步搞定 HTTP 请求
  9. BAT无线工程师面试流程详细解析
  10. SVN服务端的搭建及客户端连接(云上搭建服务端)