力扣2748.美丽下标对的数目
朴素思路
-
二重循环模拟
-
class Solution { public: int gcd(int a,int b) { return b ? gcd(b,a%b):a; } int countBeautifulPairs(vector<int>& nums) { int res=0; for(int i=0;i<nums.size() - 1;i++) for(int j=i+1;j<nums.size();j++) { string t = to_string(nums[i]); int x = t[0] - '0'; int y = nums[j]%10; if(gcd(x,y) == 1) res++; } return res; } };
优化 一次遍历
-
在遍历时 记录每个元素最高位的数字
- 同时遍历已经存储的数字 看是否有符合要求的
-
class Solution { public: int gcd(int a,int b) { return b ? gcd(b,a%b):a; } int countBeautifulPairs(vector<int>& nums) { int res=0; vector<int> cnt(10); for(int v:nums) { for(int j=1;j<10;j++) if(cnt[j] && gcd(j,v%10) == 1) res += cnt[j]; string t = to_string(v); int x = t[0] - '0'; cnt[x] ++; } return res; } };