力扣https://leetcode.cn/problems/finding-3-digit-even-numbers/
给你一个整数数组 digits ,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。
你需要找出 所有 满足下述条件且 互不相同 的整数:
该整数由 digits 中的三个元素按 任意 顺序 依次连接 组成。
该整数不含 前导零
该整数是一个 偶数
例如,给定的 digits 是 [1, 2, 3] ,整数 132 和 312 满足上面列出的全部条件。
将找出的所有互不相同的整数按 递增顺序 排列,并以数组形式返回。
示例 1:
输入:digits = [2,1,3,0]
输出:[102,120,130,132,210,230,302,310,312,320]
解释:
所有满足题目条件的整数都在输出数组中列出。
注意,答案数组中不含有 奇数 或带 前导零 的整数
//这一题还是挺有意思的,其实就是先存下每个数字的个数
//然后就分为三层,第一层不能选0,所以从1开始遍历,如果nums[i]为0直接continue
//第二层从0开始,但是要注意和第一层如果数值相同,要查看nums[i]的个数是不是大于1
//第三层从0开始遍历偶数,但是要注意和前两层有几个重合,重合的时候要注意,i的个数是否满足要求
//这一题还是挺有意思的,其实就是先存下每个数字的个数
//然后就分为三层,第一层不能选0,所以从1开始遍历,如果nums[i]为0直接continue
//第二层从0开始,但是要注意和第一层如果数值相同,要查看nums[i]的个数是不是大于1
//第三层从0开始遍历偶数,但是要注意和前两层有几个重合,重合的时候要注意,i的个数是否满足要求
class Solution {
public:
vector<int> findEvenNumbers(vector<int>& digits) {
vector<int> nums(10,0);
for(auto&k:digits){
nums[k]++;
}
//先考虑0
vector<int> ans;
for(int i=1;i<10;++i){
if(!nums[i])continue;
for(int j=0;j<10;++j){
if(!nums[j]||(i==j&&nums[i]==1))continue;
int temp=i*pow(10.0,2);
temp+=j*pow(10.0,1);
for(int k=0;k<10;k+=2){
int num_k=1;
if(k==i){
if(k==j){
++num_k;
}
++num_k;
}else if(k==j){
++num_k;
}
if(nums[k]<num_k)continue;
int val=temp;
val+=k;
ans.push_back(val);
}
}
}
return ans;
}
};