原题如下
卡牌分组
手撸代码
class Solution{
public boolean hasGroupsSizeX(int[] deck){
//因为在题目中,deck中扑克的种类不会超过10000
int[] count = new int[10000];
//得到的count数组是,以deck的数值为下标,以同种数值出现次数为值
for(int num : deck)
count[num]++;
int x = 0;
for(int num : count){
//忽略掉空(即等于0)的数组部分
if(num > 0){
//本题的核心就是,是否有一个大于等于2的数,可以作为deck中每种牌数量的最大公约数
x = gcd(x , num);
//如公约数出现了1,则代表不符合题意(因为1是所有数字的公约数)
if(x == 1)
return false;
}
}
//最后判断这个公约数是否是大于等于2
return x >= 2;
}
//用递归写的欧几里得辗转相除法,来获取公约数
//似乎python中的math可以直接用
public int gcd(int a,int b){
return b==0 ? a :gcd(b , a % b);
}
}
最近忽然意识到得准备考研了,今晚上看了一些求极限的公式,发现看似不同的公式,竟然有着千丝万缕的联系
山顶只有一个,但通往山顶的路有无数条,找出最优美的那条,就是所有数学家的心愿
——《嫌疑人X的献身》