力扣
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]
continue; - int val=temp;
- val+=k;
- ans.push_back(val);
- }
- }
- }
- return ans;
- }
- };