题目:

  1. 你有 4 张写有 1 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24
  2. 示例 1:
  3. 输入: [4, 1, 8, 7]
  4. 输出: True
  5. 解释: (8-4) * (7-1) = 24
  6. 示例 2:
  7. 输入: [1, 2, 1, 2]
  8. 输出: False
  9. 来源:力扣(LeetCode
  10. 链接:https://leetcode-cn.com/problems/24-game
  11. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案:

时间:

10min

  1. class Solution:
  2. def judgePoint24(self, nums: List[int]) -> bool:
  3. if not nums:return False
  4. def dfs(nums):
  5. n=len(nums)
  6. if n==1: return abs(nums[0]-24)<1e-6
  7. for i in range(n):
  8. for j in range(i+1,n):
  9. newnums=[nums[k] for k in range(n) if i!=k and j!=k]
  10. if dfs(newnums+[nums[i]+nums[j]]):return True
  11. if dfs(newnums+[nums[i]-nums[j]]):return True
  12. if dfs(newnums+[nums[i]*nums[j]]):return True
  13. if dfs(newnums+[nums[j]-nums[i]]):return True
  14. if nums[j]!=0 and dfs(newnums+[nums[i]/nums[j]]):return True
  15. if nums[i]!=0 and dfs(newnums+[nums[j]/nums[i]]):return True
  16. return False
  17. return dfs(nums)

要点:

1. 使用回溯法成功避开了括号的情况。

这里还有除0和 精度两个奇怪的问题

其他:

代码报错:无