2094. 找出 3 位偶数 - 力扣(LeetCode)
class Solution {List<Integer> res=new ArrayList<>();List<Integer> li=new ArrayList<>();public int[] findEvenNumbers(int[] digits) {Arrays.sort(digits);boolean[] nums=new boolean[digits.length];solut(nums,digits);return res.stream().mapToInt(i->i).toArray();}void solut(boolean[] nums,int[] digits){if (li.size() == 3) {if (li.get(0) != 0 && li.get(2) % 2 == 0) {int num = li.get(0) * 100 + li.get(1) * 10 + li.get(2);res.add(num);}return;}for(int i=0;i<digits.length;i++){if(nums[i]||(li.size()==0&&digits[i]==0)||(li.size()==2&&digits[i]%2!=0)||(i>0&&digits[i]==digits[i-1]&&!nums[i - 1])){continue;}li.add(digits[i]);nums[i]=true;solut(nums,digits);li.removeLast();nums[i]=false;}}
}
class Solution(object):def __init__(self):self.res = []self.li = []def findEvenNumbers(self, digits):digits.sort()nums = [False] * len(digits)self.solut(nums, digits)return self.resdef solut(self, nums, digits):if len(self.li) == 3:if self.li[0] != 0 and self.li[2] % 2 == 0:num = self.li[0] * 100 + self.li[1] * 10 + self.li[2]if num not in self.res: # Avoid duplicatesself.res.append(num)returnfor i in range(len(digits)):if (nums[i] or (len(self.li) == 0 and digits[i] == 0) or (len(self.li) == 2 and digits[i] % 2 != 0) or (i > 0 and digits[i] == digits[i-1] and not nums[i-1])):continueself.li.append(digits[i])nums[i] = Trueself.solut(nums, digits)self.li.pop()nums[i] = False