題目:
求一個(gè)字符串按照位數(shù)m能夠產(chǎn)生的組合惹恃,如“abc”可產(chǎn)生:ab,ac,bc
變種一:
求一個(gè)字符串可以產(chǎn)生的所有組合,如“abc”可產(chǎn)生:a,b,c,ab,ac,bc
@Test
public void test1() {
String str = "abcde";
System.out.println(choose(str, 3));}
/**
* @param target 要截取的字符串
* @param m 要截取位數(shù)
* @return 結(jié)果集
*/
public static List<String> choose(String target, int m) {
List<String> resultList = new LinkedList<String>();
doChoose(resultList, target, "", m, 0);
return resultList;
}
/**
* @param resultList 結(jié)果集
* @param target 原字符串
* @param resultStr 結(jié)果集中的單個(gè)元素钦听,默認(rèn)為空
* @param m 要截取位數(shù)
* @param head 取字符串的第幾位數(shù)
*/
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);
}
}