Problem: 2748. 美丽下标对的数目
🍻 暴力法
class Solution {
public int countBeautifulPairs(int[] nums) {
int res = 0;
int n = nums.length;
for(int i = 0; i < n; i++){
while(nums[i] >= 10){
nums[i] /= 10;
}
for(int j = i + 1; j < n; j++){
if(gcd(nums[i], nums[j] % 10) == 1 )
res++;
}
}
return res;
}
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
}
🍻 哈希表
class Solution {
public int countBeautifulPairs(int[] nums) {
int ans = 0;
int[] cnt = new int[10];// cnt[i] 表示 最高位是 i 的数的个数
for(int x : nums){
for(int y = 1 ; y < 10; y++){
if(cnt[y] > 0 && gcd(y, x % 10) == 1){
ans += cnt[y];
}
}
while(x >= 10){
x /= 10;
}
cnt[x]++;
}
return ans;
}
int gcd(int a,int b){
return b == 0 ? a : gcd(b, a % b);
}
}