方法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;
}
};