题目:
求一个字符串按照位数m能够产生的组合,如“abc”可产生:ab,ac,bc
变种一:
求一个字符串可以产生的所有组合,如“abc”可产生:a,b,c,ab,ac,bc
@Test
public void test1() {
String str = "abcde";
System.out.println(choose(str, 3));}
/**
* @param target 要截取的字符串
* @param m 要截取位数
* @return 结果集
*/
public static List<String> choose(String target, int m) {
List<String> resultList = new LinkedList<String>();
doChoose(resultList, target, "", m, 0);
return resultList;
}
/**
* @param resultList 结果集
* @param target 原字符串
* @param resultStr 结果集中的单个元素,默认为空
* @param m 要截取位数
* @param head 取字符串的第几位数
*/
private static void doChoose(List<String> resultList, String target, String resultStr, int m, int head) {
// 递归头
if (resultStr.length() == m) {
resultList.add(resultStr);
return;
}
// 递归体
for (int i = head; i < target.length(); i++) {
doChoose(resultList, target, resultStr + target.charAt(i), m, i + 1);
}
}