携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
实在不敢相信这是一道简单题
九坤-01. 可以读通讯稿的组数
- 通过的用户数287
- 尝试过的用户数340
- 用户总通过次数291
- 用户总提交次数825
- 题目难度Easy
校运动会上,所有参赛同学身上都贴有他的参赛号码。某班参赛同学的号码记于数组 nums 中。假定反转后的号码称为原数字的「镜像号码」。如果 两位同学 满足条件:镜像号码 A + 原号码 B = 镜像号码 B + 原号码 A,则这两位同学可以到广播站兑换一次读通讯稿的机会,为同班同学加油助威。请返回所有参赛同学可以组成的可以读通讯稿的组数,并将结果对10^9+7取余。
注意:
- 镜像号码中如存在前置零,则忽略前置零。
- 同一位同学可有多次兑换机会。
示例 1:
输入:
nums = [17,28,39,71]输出:
3解释:
共有三对同学,分别为 [17,28]、[17,39]、[28,39]。其中:
第一对同学:17 + 82 = 71 + 28;
第二对同学:17 + 93 = 71 + 39;
第三对同学:28 + 93 = 82 + 39。
示例 2:
输入:
nums = [71, 60]输出:
1解释:
共有一对同学,为 [71, 60]。
因为 71 + 6 = 17 + 60,此处 60 的镜像号码为 6,前导零被忽略。
代码:
class Solution {
public:
int re(int num) {
int sum = 0;
while (num) {
sum = sum * 10 + num % 10;
num /= 10;
}
return sum;
}
int numberOfPairs(vector<int>& nums) {
unordered_map<long long, long long> hash;
for (int i = 0; i < nums.size(); i++) {
int m = re(nums[i]);
int sum = nums[i] - m;
hash[sum]++;
}
long long res = 0;
for (auto it = hash.begin(); it != hash.end(); it++) {
if (it->second >= 1) {
res += it->second * (it->second - 1) / 2 % 1000000007;
}
}
return res;
}
};
这道题感觉不错
九坤-03. 数字默契考验
- 通过的用户数225
- 尝试过的用户数278
- 用户总通过次数236
- 用户总提交次数535
- 题目难度Medium
某数学兴趣小组有 N 位同学,编号为 0 ~ N-1,老师提议举行一个数字默契小测试:首先每位同学想出一个数字,按同学编号存于数组 numbers。每位同学可以选择将自己的数字进行放大操作,每次在以下操作中任选一种(放大操作不限次数,可以不操作):
- 将自己的数字乘以 2
- 将自己的数字乘以 3
若最终所有同学可以通过操作得到相等数字,则返回所有同学的最少操作次数总数;否则请返回 -1。
示例 1:
输入:numbers = [50, 75, 100]
输出:5
解释:
numbers[0] * 2 * 3 = 300 操作两次;
numbers[1] * 2 * 2 = 300 操作两次;
numbers[2] * 3 = 300 操作一次。共计操作五次。
示例 2:
输入:numbers = [10, 14]
输出:-1
解释:无法通过操作得到相同数字。
代码:
class Solution {
public:
bool f = 1;
long check(long x){
long ans=0;
while (x%3==0){
x/=3;
ans++;
}
while (x%2==0){
x/=2;
ans++;
}
if (x!=1) f=0;
return ans;
}
int minOperations(vector<int> &numbers)
{
// 0-N-1
//*=2
//*=3
//找numbers数组的最大公因数
long long lcmNum = 1;
long long ans = 0;
for (int i = 0; i < numbers.size(); i++)
{
lcmNum = lcm(lcmNum, (long long)numbers[i]);
ans = max(lcmNum, ans);
}
int c = 0;
for (int i = 0; i < numbers.size(); i++) {
long long s = ans / numbers[i];
c += check(s);
if (!f) return -1;
}
return c;
}
};