3자리 짝수 찾기

1699 단어 theabbieleetcodedsa
각 요소가 숫자인 정수 배열digits이 제공됩니다. 배열에 중복이 포함될 수 있습니다.

주어진 요구 사항을 따르는 모든 고유 정수를 찾아야 합니다.
  • 정수는 임의의 순서로 digits의 세 요소를 연결하여 구성됩니다.
  • 정수 앞에 0이 없습니다.
  • 정수가 짝수입니다.

  • 예를 들어 주어진 digits[1, 2, 3] 인 경우 정수 132312는 요구 사항을 따릅니다.

    고유 정수의 정렬된 배열을 반환합니다.

    예 1:

    입력: 숫자 = [2,1,3,0]
    출력: [102,120,130,132,210,230,302,310,312,320]
    설명: 요구 사항을 따르는 가능한 모든 정수가 출력 배열에 있습니다.
    선행 0이 있는 홀수 정수 또는 정수가 없음에 유의하십시오.

    예 2:

    입력: 숫자 = [2,2,8,8,2]
    출력: [222,228,282,288,822,828,882]
    설명: 같은 숫자는 숫자에 나타나는 만큼 여러 번 사용할 수 있습니다.
    이 예에서 숫자 8은 288, 828 및 882에서 매번 두 번 사용됩니다.

    예 3:

    입력: 숫자 = [3,7,5]
    출력: []
    설명: 주어진 숫자를 사용하여 짝수 정수를 만들 수 없습니다.

    제약:
  • 3 <= digits.length <= 100
  • 0 <= digits[i] <= 9

  • 해결책:

    import bisect
    
    class Solution:
        def findEvenNumbers(self, digits: List[int]) -> List[int]:
            n = len(digits)
            f = [i for i in range(n) if digits[i] != 0]
            s = [i for i in range(n)]
            t = [i for i in range(n) if digits[i] in {0, 2, 4, 6, 8}]
            nums = []
            for i in f:
                for j in s:
                    if i == j:
                        continue
                    for k in t:
                        if i != k and j != k:
                            val = 100 * digits[i] + 10 * digits[j] + digits[k]
                            pos = bisect.bisect_left(nums, val)
                            if pos >= len(nums) or nums[pos] != val:
                                bisect.insort(nums, val)
            return nums
    

    좋은 웹페이지 즐겨찾기