• leetcode679:24Game


    题目链接

    考虑1,5,5,5这种情况,有:5*(5-1/5)=24所以除法必须自定义运算才行。

    class Num:
        def __init__(self,up,down=1):
            self.up=up
            self.down=down
        def gcd(self,x,y):
            return x if y==0 else self.gcd(y,x%y)
        def simple(self):
            if self.up==0:
                return 
            d=self.gcd(self.up,self.down)
            self.up//=d
            self.down//=d
        def mul(self,x):
            res=Num(self.up*x.up,self.down*x.down)
            res.simple()
            return res
        def div(self,x):
            res=Num(self.up*x.down,self.down*x.up)
            res.simple()
            return res
        def add(self,x):
            res=Num(self.up*x.down+self.down*x.up,self.down*x.down)
            res.simple()
            return res
        def sub(self,x):
            res=Num(self.up*x.down-self.down*x.up,self.down*x.down)
            res.simple()
            return res
        def __str__(self):
            if self.down==1:return str(self.up)
            return "{}/{}".format(self.up,self.down)
    class Solution(object):
        def judgePoint24(self, nums):
            """
            :type nums: List[int]
            :rtype: bool
            """
            def op(x,y,o):
                if o==0:
                    return x.mul(y)
                elif o==1:
                    return x.div(y)
                elif o==2:
                    return x.add(y)
                elif o==3:
                    return x.sub(y) 
                elif o==4:
                    return y.sub(x)
                else:
                    return y.div(x)
            def newar(a,i,j,z):
                ans=[z]
                for k in range(len(a)):
                    if k!=i and k!=j:
                        ans.append(a[k])
                return ans
            def tos(x):
                return ','.join([str(i) for i in x])
            def go(nums):  
                if len(nums)==1:
                    if nums[0].up==24 and nums[0].down==1:
                        return True
                    else:
                        return False
                
    
                for i in range(len(nums)):
                    for j in range(i+1,len(nums)):
                        for k in range(6):
                            z=op(nums[i],nums[j],k)
                            res=go(newar(nums,i,j,z))
                            if res:
                                return True
                return False
            nums=[Num(i)for i in nums]
            return go(nums)
    
    
  • 相关阅读:
    POJ 3635 Full Tank?
    ZOJ 2112 Dynamic Rankings
    POJ 3468 A Simple Problem with Integers (2)
    FJOI2007 轮状病毒
    HDU 3308 LCIS
    POJ 2449 Remmarguts' Date
    Adroid平台图表案例源码
    Android项目——实现时间线程源码
    关于Ubuntu上Eclipse不显示手机设备
    自定义ListView下拉弹起效果
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7574197.html
Copyright © 2020-2023  润新知