對給定字母進行排列組合
阿新 • • 發佈:2020-09-23
給定一個字串,求組成字串(由小寫字母構成)所有字母的全部排列,返回組合的數量;字串長度小於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; } } }