301.找出3位偶数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值