You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从含重复元素的数字数组生成符合要求的唯一三位偶数?

修正找符合条件的三位偶数代码

给定整数数组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]

问题分析

原代码的核心问题:

  1. 三重循环i<j<k仅取了三个不同索引元素的固定顺序拼接,没有生成这三个元素的所有排列组合,导致大量符合要求的数被遗漏。
  2. 对于重复元素的场景,无法生成如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:10:08