Simple python dfs + memorization
added precision check fix\n\n\nclass Solution(object):\n    def judgePoint24(self, nums):\n        """\n        :type nums: List[int]\n        :rtype: bool\n   
added precision check fix\n\n```\nclass Solution(object):\n    def judgePoint24(self, nums):\n        """\n        :type nums: List[int]\n        :rtype: bool\n        """\n        hs = {}\n        return self.helper(nums, hs)\n    \n    def helper(self, nums, hs):\n        #print "debug", nums\n        if len(nums) == 1:\n            if 23.9 <= nums[0] <= 24.1:\n                return True\n            else:\n                return False\n        \n        nums = sorted(nums)\n        if "".join(str(nums) + ",") in hs:\n            return False\n        \n        for i in range(len(nums) - 1):\n            for j in range(i + 1, len(nums)):\n                a = nums[i]\n                b = nums[j]\n                if self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [a + b], hs) == True:\n                    return True\n                if self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [a * b], hs) == True:\n                    return True\n                if b != 0 and self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [float(a) / b], hs) == True:\n                    return True\n                if self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [a - b], hs) == True:\n                    return True\n                if a != 0 and self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [float(b) / a], hs) == True:\n                    return True\n                if self.helper(nums[:i] + nums[i + 1:j] + nums[j + 1:] + [b - a], hs) == True:\n                    return True\n        \n        hs["".join(str(nums) + ",")] = True\n        return False\n```
[]