给你一个整数数组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]
输出:[]
解释:
构造的所有整数都会有 前导零 。因此,不存在满足题目条件的整数。
提示:
3 <= digits.length <= 100
0 <= digits[i] <= 9
-
暴力
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; } }
-
统计
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; } }
留言