1. 程式人生 > 實用技巧 >對給定字母進行排列組合

對給定字母進行排列組合

給定一個字串,求組成字串(由小寫字母構成)所有字母的全部排列,返回組合的數量;字串長度小於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;
    }
  }
}