leetcode第270场周赛,5942 找出3位偶数

方法1:直接枚举100 - 999的所有三位数字
因为这道题是easy级别的,所以不用多想,因为题目比较特殊,只有三位数,所以就可以先把所有的三位偶数都列举出来,然后看是否符合题目中的条件,如果符合,就插入到res中,最终返回即可

class Solution {
    int hash[10];
public:
    vector<int> findEvenNumbers(vector<int>& digits) {
        vector<int> res;
        int len = digits.size();
        for (auto x : digits)
            hash[x] ++;
        for (int i = 100; i < 1000; i += 2) {
            int ge = i % 10, shi = (i / 10) % 10, bai = i / 100;
                hash[ge] --;
                hash[shi] --;
                hash[bai] --;
            if (hash[ge] >= 0 && hash[shi] >= 0 && hash[bai] >= 0) 
            res.push_back(i);
            hash[ge] ++;
            hash[shi] ++;
            hash[bai] ++;
            

        }
        return res;
    }
};

方法2:遍历整个数组,先找出所有三个数的组合,三个为一组,,一组中的三个数每一个都有可能作为个位,剩下两个数可能作为十位和百位,因为所有的偶数的各位都是2的倍数,所以可以对2取余,那么各位的十位的数字就是两种情况,分别计算,求出最终的和,如果和大于100,就证明是非0开头的三位数,那么就插入unordered_set 中,因为unordered_set 存储数组的时候会删掉重复的元素,最终给res赋值即可。

class Solution {
public:
    vector<int> findEvenNumbers(vector<int>& digits) {
        vector <int> res;
        unordered_set<int> res1;
        int len = digits.size();
        for (int i = 0; i < len - 2; i ++)
        for (int j = i + 1; j < len - 1; j ++)
        for (int k = j + 1; k < len; k ++){
            int a = digits[i];
            int b = digits[j];
            int c = digits[k];
            if (a % 2 == 0){
                int number1 = a + 10 * b + 100 * c;
                int number2 = a + 10 * c + 100 * b;
                if (number1 >= 100)
                    res1.insert(number1);
                if (number2 >= 100)
                    res1.insert(number2); 
            }
            if (b % 2 == 0){
                int number1 = b + 10 * a + 100 * c;
                int number2 = b + 10 * c + 100 * a;
                if (number1 >= 100)
                    res1.insert(number1);
                if (number2 >= 100)
                    res1.insert(number2); 
            }
            if (c % 2 == 0){
                int number1 = c + 10 * a + 100 * b;
                int number2 = c + 10 * b + 100 * a;
                if (number1 >= 100)
                    res1.insert(number1);
                if (number2 >= 100)
                    res1.insert(number2); 
            }
        }
        for (auto x : res1)
        res.push_back(x);
        sort(res.begin(), res.end());
        return res;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值