对给定字母进行排列组合
给定一个字符串,求组成字符串(由小写字母构成)所有字母的全部排列,返回组合的数量;字符串长度小于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; } } }