【IT笔试面试题整理】字符串的组合
来源:互联网 发布:好看的美国电影 知乎 编辑:程序博客网 时间:2024/05/01 19:16
【试题描述】输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入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 }
阅读全文
0 0
- 【IT笔试面试题整理】字符串的组合
- 【IT笔试面试题整理】字符串的排列
- 【IT笔试面试题整理】丑数
- 【IT笔试面试题整理】位操作
- 【IT笔试面试题整理】链表
- 【IT笔试面试题整理】字符串转数组+数组转字符串
- 整理的笔试面试题
- 整理的笔试面试题
- 【IT笔试面试题整理】笔试和面试中常见的智力题
- 【IT笔试面试题整理】笔试和面试中常见的智力题
- 笔试面试题整理
- 网友汇总的IT笔试面试题
- 【IT笔试面试题整理】海盗分宝石
- 【IT笔试面试题整理】不用加减乘除做加法
- 【IT笔试面试题整理】反转链表
- 【IT笔试面试题整理】堆栈和队列
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
- 【IT笔试面试题整理】连续子数组的最大和
- 【IT笔试面试题整理】二叉树中和为某一值的路径--从根到叶子节点
- Centos7防火墙
- 【CB Insights全球最强AI创新公司Top100榜单】旷视、商汤、寒武纪等7家中国公司入选
- 【IT笔试面试题整理】二叉树中和为某一值的路径--所有可能路径
- 【IT笔试面试题整理】字符串的排列
- 【IT笔试面试题整理】字符串的组合
- TCP/IP协议三次握手和四次挥手大白话解说
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
- 20171215Capstone培训班
- 【IT笔试面试题整理】反转链表
- 【IT笔试面试题整理】字符串转数组+数组转字符串
- 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点
- 【IT笔试面试题整理】判断一个二叉树是否是平衡的?
- 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。