【LeetCode】5942. 找出 3 位偶数 Finding 3-Digit Even Numbers

  • 作者: 负雪明烛
  • id: fuxuemingzhu
  • 个人博客: http://fuxuemingzhu.cn/
  • 公众号:负雪明烛
  • 本文关键词:Leetcode, 力扣,偶数,刷题,Python

题目地址:https://leetcode-cn.com/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]
解释:
所有满足题目条件的整数都在输出数组中列出。 
注意,答案数组中不含有 奇数 或带 前导零 的整数。

示例 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]
输出:[]
解释:
构造的所有整数都会有 前导零 。因此,不存在满足题目条件的整数。

提示:

  1. 3 <= digits.length <= 100
  2. 0 <= digits[i] <= 9

题目大意

从给定数组中抽取出来 3 个数字,组成的数字中,有哪些偶数。

解题方法

遍历

讲一下做这个题时我的心路历程。

第一反应,从给定数组中抽取 3 个数字,这是个组合问题。是不是可以任意抽取 3 个数字,再用全排列组成新数字,然后判断新数字是不是偶数?时间复杂度会很高,还要去重,最后还要按题目的要求进行排序。对于 Easy 题来说,这个做法太难了。

必须换个思路。

然后我就想,3 位的整数有多少个?只有 100~999 总共 900 个数字。我是不是看这 900 个数字能不能用题目给出的数组中的数字表示出来就行了?

也就是说遍历 100~999 总共 900 个数字,把每个数字拆解成 3 位,看这 3 位数字是不是题目给出数组的子集。

想到这里的时候,突然就明白了为什么题目要求我们返回的结果要去重,要排序了。因为这种做法天然就是去重并且排序的。去重和排序时题目给我们的提示!

子集怎么判断?所有判断子集的问题都用统计词频的方式去做啊!

代码很简单,在周赛的时候也只用 5 分钟就写出来了。

Python 代码如下:

class Solution(object):
    def findEvenNumbers(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        counter = collections.Counter(digits)
        res = []
        for i in range(100, 1000, 2):
            curCounter = collections.Counter(map(int,list(str(i))))
            valid = True
            for x in curCounter:
                if curCounter[x] > counter[x]:
                    valid = False
                    break
            if valid:
                res.append(i)
        return res

日期

2021 年 12 月 6 日 —— 看到别人家买的房子真好看

猜你喜欢

转载自blog.csdn.net/fuxuemingzhu/article/details/121758678