题目:你有4张卡片,上面是1-9的任意数字,要求通过任意“+、-、*、/”和括号运算,判断能否使得4张卡片数字运算结果为24。
例:input: [4,1,8,7]
output:True
Explanation:(8-4)*(7-1)=24
分析:每次运算都是2个数字进行加减乘除,运算1次后剩下3个数,再选2个数进行加减乘除,直至最终结果,与24进行比较。采用递归方法解决。可以解决n个数的判断问题。
代码如下:
import itertools
class Solution(object):
def judgePoint24(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(nums) == 1:
return abs(nums[0]-24)<0.1
return any(self.judgePoint24([x] + list(lst[2:]))
for lst in itertools.permutations(nums)
for x in {lst[0]+lst[1], lst[0]-lst[1], lst[0]*lst[1]*1.0,
lst[1] and lst[0]*1.0/lst[1]})
s=Solution()
print s.judgePoint24([3,3,8,8])