题目
求字符的所有组合,例如输入三个字符a、b、c,其组合有a、b、c、ab、ac、bc以及abc。值得注意的是ab和ba虽然是两种排列,但是只算作一种组合解题思路
在n个字符中选择m的组合时,可以将原问题拆分为两个子问题:
1)如果组合里包含第一个字符,则在剩下的n-1个中选择m-1个字符;
2)如果组合里不包含第一个字符,则在剩下的n-1个中选择m个字符;java实现
public class Permutation
{
public static void multiCombination(String str)
{
if (null == str)
{
return ;
}
StringBuilder sb = new StringBuilder();
int iter = 1;
while (iter <= str.length())
{
multiCombination(str, iter, sb);
++iter;
}
}
private static void multiCombination(String str, int m, StringBuilder sb)
{
if (m == 0)
{
System.out.println(sb.toString());
return ;
}
if (str.length() != 0)
{
sb.append(str.charAt(0));
// 从剩余的n-1个中选择m-1个
multiCombination(str.substring(1), m - 1, sb);
sb.deleteCharAt(sb.length() - 1);
// 从剩余的n-1个中选择m个
multiCombination(str.substring(1), m, sb);
}
}
public static void main(String [] args)
{
String str = "abc";
multiCombination(str);
}
}