给你一个整数数组digits,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。

你需要找出所有满足下述条件且互不相同的整数:

  • 该整数由digits中的三个元素按 任意 顺序 依次连接 组成。
  • 该整数不含前导零
  • 该整数是一个偶数

例如,给定的digits[1, 2, 3],整数132312满足上面列出的全部条件。

将找出的所有互不相同的整数按递增顺序排列,并以数组形式返回。

示例 1:

输入:digits = [2,1,3,0]
输出:[102,120,130,132,210,230,302,310,312,320]
解释:
所有满足题目条件的整数都在输出数组中列出。 
注意,答案数组中不含有 奇数 或带 前导零 的整数。

示例 2:

输入:digits = [2,2,8,8,2]
输出:[222,228,282,288,822,828,882]
解释:
同样的数字(0 - 9)在构造整数时可以重复多次,重复次数最多与其在 digits 中出现的次数一样。 
在这个例子中,数字 8 在构造 288、828 和 882 时都重复了两次。 

示例 3:

输入:digits = [3,7,5]
输出:[]
解释:
使用给定的 digits 无法构造偶数。

示例 4:

输入:digits = [0,2,0,0]
输出:[200]
解释:
唯一一个不含 前导零 且满足全部条件的整数是 200 。

示例 5:

输入:digits = [0,0,0]
输出:[]
解释:
构造的所有整数都会有 前导零 。因此,不存在满足题目条件的整数。

提示:

  • 3 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  1. 暴力
    Python:

    class Solution:
    def findEvenNumbers(self, digits: List[int]) -> List[int]:
        lens = len(digits)
        result = []
        aset = set()
        for i in range(lens):
            for j in range(lens):
                for k in range(lens):
                    if i != j and i != k and j != k and digits[i] != 0 and digits[k] % 2 == 0:
                        aset.add(100*digits[i]+10*digits[j]+digits[k])
        result = list(aset)
        result.sort()
        return result

    Java:

    class Solution {
    public int[] findEvenNumbers(int[] digits) {
        Set<Integer> num = new HashSet<Integer>();
        int value;
        for(int i = 0; i < digits.length; i++)
        {
            for(int j = 0; j < digits.length; j++)
            {
                for(int k = 0; k < digits.length; k++)
                {
                    if(i == k || i == j || j == k)
                        continue;
                    value = 100*digits[i]+10*digits[j]+digits[k];
                    if(value >= 100 && value % 2 == 0)
                        num.add(value);
                }
            }
        }
        int[] result = new int[num.size()];
        int i = 0;
        for(Integer n: num)
            result[i++] = n;
        Arrays.sort(result);
        return result;
    }
    }
  2. 统计
    Python:

    class Solution:
    def findEvenNumbers(self, digits: List[int]) -> List[int]:
        result = []
        count = [0 for i in range(10)]
        for n in digits:
            count[n] += 1
        for num in range(100, 999, 2):
            temp = [num // 100, (num // 10) % 10, num % 10]
            adic = dict()
            for item in temp:
                if item not in adic.keys():
                    adic[item] = 1
                else:
                    adic[item] += 1
            for key in adic.keys():
                if adic[key] > count[key]:
                    break
            else:
                result.append(num)
        return result

    Java:

    class Solution {
    public int[] findEvenNumbers(int[] digits) {
        int[] count = new int[10];
        List<Integer> result = new ArrayList<Integer>();
        for(int n: digits)
            count[n] += 1;
        for(int i = 100; i < 999; i+=2)
        {
            int[] temp = {i / 100, (i/10) % 10, i % 10};
            boolean flag = true;
            HashMap<Integer, Integer> dic = new HashMap<Integer, Integer>();
            for(int v: temp)
            {
                if(!dic.containsKey(v))
                    dic.put(v, 1);
                else
                    dic.compute(v, (key, value)->value+=1);
            }
            for(int v: dic.keySet())
            {
                if(dic.get(v) > count[v])
                    flag = false;
            }
            if(flag)
                result.add(i);
        }
        int[] array = new int[result.size()];
        for(int i = 0; i < array.length; i++)
        {
            array[i] = result.get(i);
        }
        return array;
    }
    }
最后修改日期: 2022年1月23日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。