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.res
def 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 duplicates
self.res.append(num)
return
for 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])):
continue
self.li.append(digits[i])
nums[i] = True
self.solut(nums, digits)
self.li.pop()
nums[i] = False