对给定字母进行排列组合

给定一个字符串,求组成字符串(由小写字母构成)所有字母的全部排列,返回组合的数量;字符串长度小于8,字符串为0,返回0.

输入:aab

输出:3

解法:可以根据概率论中的排列组合,计算3*2=6种,去重后即为答案。   第一个字母有n个位置可以交换,下一个字母有n-1个位置,依次类推,使用递归

import java.util.HashSet;

/**
 * @Author: cunxiaopan
 * @Date: 2020/09/23 20:43
 * @Description:  字母排列 算法
 */
public class Arrange {
  public static void main(String[] args) {
    String str = "AAB";
    char[] chs= str.toCharArray();
    HashSet set  = new HashSet();
    arrange(chs, 0, chs.length,set);
    System.out.print(set);
  }

  public static void arrange(char[] chs, int start, int len, HashSet set) {
    if (start == len - 1) {
      String aString = "";
      for (int i = 0; i < chs.length; ++i){
        aString =aString + chs[i];
      }
      set.add(aString);
      return;
    }

    for (int i = start; i < len; i++) {
      char temp = chs[start];
      chs[start] = chs[i];
      chs[i] = temp;
      arrange(chs, start + 1, len, set);
      temp = chs[start];
      chs[start] = chs[i];
      chs[i] = temp;
    }
  }
}

  

posted @ 2020-09-23 21:11  衰草寒烟  阅读(448)  评论(0编辑  收藏  举报