如何从含重复元素的数字数组生成符合要求的唯一三位偶数?
修正找符合条件的三位偶数代码
给定整数数组digits(元素均为数字,可重复),需找出所有满足以下要求的唯一整数:
- 整数由数组中任意三个元素按任意顺序拼接而成
- 整数无前导零
- 整数为偶数
例如,输入[1,2,3],返回排序后的数组[132, 312]。
尝试的错误代码
def findEvenNumbers(self, digits): list = set() finallist=[] for i in range(len(digits)): for j in range(i+1, len(digits)): for k in range(j+1, len(digits)): num1 = digits[i] num2 = digits[j] num3 = digits[k] conct = str(num1) + str(num2) + str(num3) if conct[0] != '0': list.add(conct) for num in list: if int(num) %2 == 0: finallist.append(int(num)) finallist.sort() return finallist
错误测试用例
测试用例1
输入:digits = [2,1,3,0]
输出:[130,210,230]
预期:[102,120,130,132,210,230,302,310,312,320]
测试用例2
输入:digits = [2,2,8,8,2]
输出:[222,228,282,288,882]
预期:[222,228,282,288,822,828,882]
问题分析
原代码的核心问题:
- 三重循环
i<j<k仅取了三个不同索引元素的固定顺序拼接,没有生成这三个元素的所有排列组合,导致大量符合要求的数被遗漏。 - 对于重复元素的场景,无法生成如
822这类需要重复元素不同排列的数。
修正后的代码
from itertools import permutations def findEvenNumbers(digits): result = set() # 生成所有长度为3的元素排列,涵盖所有可能的顺序组合 for perm in permutations(digits, 3): num_str = ''.join(map(str, perm)) # 检查无前导零且为偶数 if num_str[0] != '0' and int(num_str) % 2 == 0: result.add(int(num_str)) # 排序后返回结果列表 return sorted(result)
代码说明
- 用
itertools.permutations(digits, 3)生成所有3元素排列,自动覆盖所有顺序组合,同时处理重复元素的不同索引场景。 - 对每个排列拼接成字符串,先过滤无前导零的情况,再判断是否为偶数,符合条件的整数加入集合自动去重。
- 最后将集合转为排序后的列表,满足题目对结果格式的要求。
内容的提问来源于stack exchange,提问作者m.shahzad
相关产品推荐
相关产品推荐

