原题链接
思路:全排列
首先先全排列,然后将结果存入
HashSet
里去重(这个操作就相当于12!/(3!*4!*5!)
得出来的结果是27720
,然后还要考虑转动的情况,可以很简单的看出来需要有12种转动的可能,所以27720/12=2310
,2310
为不考虑翻转的所有种情况,翻转一般情况下是/2,结果为1155
,但是有的是本来就是对称的,所以这里边相当于把那种本来也是对称的情况也/2了,也就是结果应该为1155+本来就是对称的情况数目/2
)
下边重点说明一下本来就是对称的这种情况
假设我们将这三种玛瑙分别记做A、B、C,对应的数目为3,4,5;要想使他对称,那必定关于对称轴左右两边的元素数目是相等的,也就是说除去对称轴的,左右两边元素的个数之和为偶数。所以显而易见A、C是对称轴。
import java.util.HashSet;
public class Main{
static int ans = 0;
static char c[] = {'a','a','a','b','b','b','b','c','c','c','c','c'};
static HashSet<String>hs = new HashSet<>();
public static void qpl(int k) {
if(k>=c.length) {
String str="";
for (int i = 0; i < c.length; i++) {
str +=c[i];
}
hs.add(str);
}else {
for(int i=k;i<c.length;i++) {
char t = c[i];c[i]=c[k];c[k]=t;
qpl(k+1);
t = c[i];c[i]=c[k];c[k]=t;
}
}
}
public static void main(String[] args) {
qpl(0);
System.out.println(hs.size()/24+15);
}
}
本篇文章参考这篇博客:https://blog.youkuaiyun.com/weixin_43809546/article/details/89189661