leetcode_679.24 点游戏 python3

举报
悲恋花丶无心之人 发表于 2021/02/03 02:24:56 2021/02/03
【摘要】  目录 一、题目内容 二、解题思路 三、 代码 一、题目内容 游戏规则:你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: (8-4) * (7-1) = 24 示例 2: 输入:...

 目录

一、题目内容

二、解题思路

三、 代码


一、题目内容

游戏规则:你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。

  • 示例 1:

输入: [4, 1, 8, 7]
输出: True
解释: (8-4) * (7-1) = 24

  • 示例 2:

输入: [1, 2, 1, 2]
输出: False

  • 注意:

除法运算符 / 表示实数除法,而不是整数除法。例如 4 / (1 - 2/3) = 12 。
每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式 -1 - 1 - 1 - 1 是不允许的。
你不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。

二、解题思路

1.递归处理,4->3->2

2.注意分母不能为0否则ZeroDivisionError

3.python3代码,如果换成python则测试用例[8,1,6,6]不通过(应为True,python为False,python3为True)

三、 代码


  
  1. class Solution(object):
  2. def judgePoint24(self, nums):
  3. """
  4. :type nums: List[int]
  5. :rtype: bool
  6. """
  7. a = nums[0]
  8. b = nums[1]
  9. c = nums[2]
  10. d = nums[3]
  11. def iter_judge_4(a, b, c, d):
  12. return \
  13. iter_judge_3(a + b, c, d) or \
  14. iter_judge_3(a - b, c, d) or \
  15. iter_judge_3(a * b, c, d) or \
  16. (iter_judge_3(a / b, c, d) if b != 0 else False) or \
  17. iter_judge_3(b - a, c, d) or \
  18. (iter_judge_3(b / a, c, d) if a != 0 else False) or \
  19. \
  20. iter_judge_3(b + c, a, d) or \
  21. iter_judge_3(b - c, a, d) or \
  22. iter_judge_3(b * c, a, d) or \
  23. (iter_judge_3(b / c, a, d) if c != 0 else False) or \
  24. iter_judge_3(c - b, a, d) or \
  25. (iter_judge_3(c / b, a, d) if b != 0 else False) or \
  26. \
  27. iter_judge_3(c + d, a, b) or \
  28. iter_judge_3(c - d, a, b) or \
  29. iter_judge_3(c * d, a, b) or \
  30. (iter_judge_3(c / d, a, b) if d != 0 else False) or \
  31. iter_judge_3(d - c, a, b) or \
  32. (iter_judge_3(d / c, a, b) if c != 0 else False) or \
  33. \
  34. iter_judge_3(a + c, b, d) or \
  35. iter_judge_3(a - c, b, d) or \
  36. iter_judge_3(a * c, b, d) or \
  37. (iter_judge_3(a / c, b, d) if c != 0 else False) or \
  38. iter_judge_3(c - a, b, d) or \
  39. (iter_judge_3(c / a, b, d) if a != 0 else False) or \
  40. \
  41. iter_judge_3(a + d, b, c) or \
  42. iter_judge_3(a - d, b, c) or \
  43. iter_judge_3(a * d, b, c) or \
  44. (iter_judge_3(a / d, b, c) if d != 0 else False) or \
  45. iter_judge_3(d - a, b, c) or \
  46. (iter_judge_3(d / a, b, c) if a != 0 else False) or \
  47. \
  48. iter_judge_3(b + d, a, c) or \
  49. iter_judge_3(b - d, a, c) or \
  50. iter_judge_3(b * d, a, c) or \
  51. (iter_judge_3(b / d, a, c) if d != 0 else False) or \
  52. iter_judge_3(d - b, a, c) or \
  53. (iter_judge_3(d / b, a, c) if b != 0 else False)
  54. def iter_judge_3(a, b, c):
  55. return \
  56. iter_judge_2(a + b, c) or \
  57. iter_judge_2(a * b, c) or \
  58. iter_judge_2(a - b, c) or \
  59. (iter_judge_2(a / b, c) if b != 0 else False) or \
  60. iter_judge_2(b - a, c) or \
  61. (iter_judge_2(b / a, c) if a != 0 else False) or \
  62. \
  63. iter_judge_2(b + c, a) or \
  64. iter_judge_2(b * c, a) or \
  65. iter_judge_2(b - c, a) or \
  66. (iter_judge_2(b / c, a) if c != 0 else False) or \
  67. iter_judge_2(c - b, a) or \
  68. (iter_judge_2(c / b, a) if b != 0 else False) or \
  69. \
  70. iter_judge_2(c + a, b) or \
  71. iter_judge_2(c * a, b) or \
  72. iter_judge_2(c - a, b) or \
  73. (iter_judge_2(c / a, b) if a != 0 else False) or \
  74. iter_judge_2(a - c, b) or \
  75. (iter_judge_2(a / c, b) if c != 0 else False)
  76. def iter_judge_2(a, b):
  77. return \
  78. abs(a + b - 24) < 0.001 or \
  79. abs(a - b - 24) < 0.001 or \
  80. abs(a * b - 24) < 0.001 or \
  81. (abs(a / b - 24) < 0.001 if b != 0 else False) or \
  82. abs(b - a - 24) < 0.001 or \
  83. (abs(b / a - 24) < 0.001 if a != 0 else False)
  84. ans = iter_judge_4(a, b, c, d)
  85. return ans
  86. if __name__ == '__main__':
  87. nums = [8,1,6,6]
  88. s = Solution()
  89. ans = s.judgePoint24(nums)
  90. print(ans)

 

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108175158

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。