求字符串组合
来源:互联网 发布:西安软件开发外包公司 编辑:程序博客网 时间:2024/06/07 17:18
输入一个字符串,求其所有的组合。例如输入字符串abc,
则打印出由字符a,b,c所能组合出来的所有字符串a,b,c,ab,ac,bc,abc。
结果请按字母顺序输出。
1:思路:
假设该字符串数组长度为len,则其组合按长度分类的话有1,2,…..m,….len。在长度为m的组合中,其分类可分成两类:包含数组首个元素的和不包含数组首个元素的。
a:包含的,则从余下的元素中选取m-1个元素的组合
b:不包含的,从余下的元素中选取m个元素的组合
将a和b两种情况综合在一起,便是m个元素的组合方式。
那么求一个数组的所有组合方式的话,要对其长度做一个循环,将所有组合方式综合起来。
2 : 方法:
(1)求在数组arr中,m个元素的组合,下标从begin-1开始,即分为包含该小标元素和不包含该下标元素的情况。
/** * * @param arr 字符串数组 * @param begin 开始数(下标+1) * @param num 组合个数 * @return */public static ArrayList<String> cal(String[] arr,int begin,int num){ ArrayList<String> result=new ArrayList<String>(); if(num<=0){ return null; } if(begin>arr.length){ return null; } if(num-1>arr.length-begin){ return null; } //1:contain first String first=arr[begin-1]; ArrayList<String> test=cal(arr,begin+1,num-1); if(test!=null){ for(String a:test){ a=first+a; //System.out.println(a); result.add(a); } } if(num==1){ result.add(first); } //2:do not contain the first ArrayList<String> test2=cal(arr,begin+1,num); if(test2!=null){ for(String o:test2){ result.add(o); } } return result; }
(2)对数组长度进行循环求组合
ArrayList<String> result=new ArrayList<String>(); for(int i=0;i<arr.length;i++){ result.addAll(cal(arr,1,i+1)); }
- 思考:如果是求所有字符的排列该如何求–明天见咯?
0 0
- 求字符串组合数
- 求字符串组合
- 求字符串所有组合
- 求字符串的所有组合
- 求字符串的所有组合
- 求字符串的所有组合
- 求组合排列和字符串偏移
- 求字符串的所有组合输出
- 求字符串中元素的所有组合
- 求字符串字串组合排列算法
- 《剑指Offer》:求字符串的组合
- 求字符串的len组合数(java程序)
- 求一个字符串中所有字符的组合
- 求一个字符串中所有字符的组合
- lightoj1060(求字符串第k大排列)组合数学
- 求一串字符串的全排列和所有组合
- C++实现求字符串的所有的组合
- 求集合/字符串中的所有组合 (C语言)
- ListView下拉刷新
- 创建对于用户失败 在当前数据库存已存在
- iOS开发 学习计划图
- C语言中getchar()、gets()和scanf()的特点以及scanf产生的多余回车符问题
- 算法之美_源代码发布(3)
- 求字符串组合
- C语言字符的赋值与输出格式
- Java内存泄露
- Java集合部分
- Mac OSX中memcached安装测试
- 模式识别学习笔记(六)---Fisher判别
- 计算理论_可归约性
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- day11-文件的简单操作